From ab8fc7b1abd273c4fb00831d294d961e013421b5 Mon Sep 17 00:00:00 2001 From: "penghouwen@icloud.com" Date: Tue, 14 Jan 2020 14:35:47 +0800 Subject: [PATCH 01/21] integrate c-darts algorithm --- examples/nas/cdarts/README.md | 110 +++++ examples/nas/cdarts/aux_head.py | 99 +++++ examples/nas/cdarts/config.py | 135 ++++++ examples/nas/cdarts/datasets/cifar.py | 108 +++++ examples/nas/cdarts/datasets/data_utils.py | 398 ++++++++++++++++++ examples/nas/cdarts/datasets/imagenet.py | 95 +++++ examples/nas/cdarts/genotypes.py | 163 +++++++ examples/nas/cdarts/images/cell1.png | Bin 0 -> 28026 bytes examples/nas/cdarts/images/cell2.png | Bin 0 -> 29359 bytes examples/nas/cdarts/images/cell3.png | Bin 0 -> 36654 bytes examples/nas/cdarts/images/framework1.png | Bin 0 -> 121056 bytes examples/nas/cdarts/images/framework2.png | Bin 0 -> 112057 bytes examples/nas/cdarts/model.py | 162 +++++++ examples/nas/cdarts/ops.py | 161 +++++++ examples/nas/cdarts/retrain.py | 153 +++++++ examples/nas/cdarts/run_retrain_cifar.sh | 13 + examples/nas/cdarts/run_search_cifar.sh | 14 + examples/nas/cdarts/search.py | 44 ++ examples/nas/cdarts/trainer.py | 270 ++++++++++++ examples/nas/cdarts/utils.py | 177 ++++++++ .../pynni/nni/nas/pytorch/cdarts/__init__.py | 5 + .../pynni/nni/nas/pytorch/cdarts/mutator.py | 75 ++++ .../pynni/nni/nas/pytorch/cdarts/trainer.py | 203 +++++++++ 23 files changed, 2385 insertions(+) create mode 100644 examples/nas/cdarts/README.md create mode 100644 examples/nas/cdarts/aux_head.py create mode 100644 examples/nas/cdarts/config.py create mode 100644 examples/nas/cdarts/datasets/cifar.py create mode 100644 examples/nas/cdarts/datasets/data_utils.py create mode 100644 examples/nas/cdarts/datasets/imagenet.py create mode 100644 examples/nas/cdarts/genotypes.py create mode 100644 examples/nas/cdarts/images/cell1.png create mode 100644 examples/nas/cdarts/images/cell2.png create mode 100644 examples/nas/cdarts/images/cell3.png create mode 100644 examples/nas/cdarts/images/framework1.png create mode 100644 examples/nas/cdarts/images/framework2.png create mode 100644 examples/nas/cdarts/model.py create mode 100644 examples/nas/cdarts/ops.py create mode 100644 examples/nas/cdarts/retrain.py create mode 100644 examples/nas/cdarts/run_retrain_cifar.sh create mode 100644 examples/nas/cdarts/run_search_cifar.sh create mode 100644 examples/nas/cdarts/search.py create mode 100644 examples/nas/cdarts/trainer.py create mode 100644 examples/nas/cdarts/utils.py create mode 100644 src/sdk/pynni/nni/nas/pytorch/cdarts/__init__.py create mode 100644 src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py create mode 100644 src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py diff --git a/examples/nas/cdarts/README.md b/examples/nas/cdarts/README.md new file mode 100644 index 0000000000..f4421ea4b9 --- /dev/null +++ b/examples/nas/cdarts/README.md @@ -0,0 +1,110 @@ +# Cyclic Differentiable Architecture Search +This is CDARTS based on the NNI platform, which currently supports CIFAR10 search and retrain. ImageNet search and retrain should also be supported, and we provide corresponding interfaces. Our reproduced results on NNI are slightly lower than the paper, but much higher than the original DARTS. + +
+ + +
+ +## Results +#### Main CIFAR10 top1 accuracy of DARTS and DARTS reproduced by NNI +| Order | Paper | NNI | +| ---- |:-------------:| :-----:| +| 1 | 97.00 +/-0.14 | 97.22 | +| 2 | 97.24 +/-0.09 | 97.11 | + +#### Main CIFAR10 top1 accuracy of CDARTS and CDARTS reproduced by NNI +| Runs | Paper | NNI | +| ---- |:-------------:| :-----:| +| 1 | 97.52 | 97.43 | +| 2 | 97.53 | 97.46 | +| 3 | 97.58 | 97.47 | + +### The normal cells searched by CDARTS(NNI) on CIFAR10 +
+ + +
+ +
+ + + +
+ + +## Environments +Tesla V100, CUDA10.0, linux 16.04, pytorch>=1.2, python3, [apex](https://github.com/NVIDIA/apex) and NNI 1.3 + +## Data Preparation +* [Cifar-10](https://www.cs.toronto.edu/~kriz/cifar.html) +* [Cifar-100](https://www.cs.toronto.edu/~kriz/cifar.html) +* [ImageNet-2012](http://www.image-net.org/) + +Create soft link in main dir. +``` +ln -s $DataLocation data +``` + +## Installation +* First, install python requirements. + ```buildoutcfg + pip install torch==1.2.0 + pip install tensorboard==1.13.0 + pip install tensorboardX==1.6 + pip install nni==1.3.0 + ``` +* Then, you should install apex. + ```buildoutcfg + git clone https://github.com/NVIDIA/apex + cd apex + python setup.py install --cpp_ext --cuda_ext + ``` + +## Search and Retrain +### Search +* Main python file is ${ROOT}/search.py +* Followings are options during training. + ```buildoutcfg + --regular_ratio # if use regular, the ragular ratio + --regular_coeff # if use regular, the regular coefficient + --loss_alpha # the loss coefficient + --loss_T # the loss coefficient + --w_lr # the learning rate of the search network + --alpha_lr # the learning rate of the architecture parameters + --nasnet_lr # the learning rate of the evaluation network + --w_weight_decay # the weight decay the search and the evaluation network + --alpha_weight_decay # the weight decay the the architecture parameters + --fix_head # wheter to fix the paramters of auxiliary heads + --interactive_type # The KD function, kl and smoothl1 + --share_module # Whether to share module of the two networks + --warmup_epochs # the epochs to warmup the search network + --epochs # total epochs of search + + ``` +* Here we present our search scripts on CIFAR10. + ```buildoutcfg + bash run_search_cifar.sh + ``` + + +### Retrain +* Main python file is ${ROOT}/retrain.py +* Followings are options during training. + ```buildoutcfg + --arc_checkpoint # choose which genotype to retrain + --cell_file # path of cell genotype + --weight_decay # decay of W in the Retrain-Phase + --lr # learning rate of W in the Retrain-Phase + --warmup_epochs # warmup epochs + --epochs # total retrain epochs + --cutout_length # cutout length for cifar + --aux_weight # weight of auxiliary loss, 0.4 is the best option + --drop_path_prob # used for dropping path in NAS + --label_smooth # label smooth ratio + --mixup_alpha # ratio of mixup + ``` +* Here we present our train scripts on CIFAR10. + ```buildoutcfg + bash run_retrain_cifar.sh + ``` diff --git a/examples/nas/cdarts/aux_head.py b/examples/nas/cdarts/aux_head.py new file mode 100644 index 0000000000..352db6a7df --- /dev/null +++ b/examples/nas/cdarts/aux_head.py @@ -0,0 +1,99 @@ +import torch.nn as nn + + +class DistillHeadCIFAR(nn.Module): + + def __init__(self, C, size, num_classes, bn_affine=False): + """assuming input size 8x8 or 16x16""" + super(DistillHeadCIFAR, self).__init__() + self.features = nn.Sequential( + nn.ReLU(), + nn.AvgPool2d(size, stride=2, padding=0, count_include_pad=False), # image size = 2 x 2 / 6 x 6 + nn.Conv2d(C, 128, 1, bias=False), + nn.BatchNorm2d(128, affine=bn_affine), + nn.ReLU(), + nn.Conv2d(128, 768, 2, bias=False), + nn.BatchNorm2d(768, affine=bn_affine), + nn.ReLU() + ) + self.classifier = nn.Linear(768, num_classes) + self.gap = nn.AdaptiveAvgPool2d(1) + + def forward(self, x): + x = self.features(x) + x = self.gap(x) + x = self.classifier(x.view(x.size(0), -1)) + return x + + +class DistillHeadImagenet(nn.Module): + + def __init__(self, C, size, num_classes, bn_affine=False): + """assuming input size 7x7 or 14x14""" + super(DistillHeadImagenet, self).__init__() + self.features = nn.Sequential( + nn.ReLU(), + nn.AvgPool2d(size, stride=2, padding=0, count_include_pad=False), # image size = 2 x 2 / 6 x 6 + nn.Conv2d(C, 128, 1, bias=False), + nn.BatchNorm2d(128, affine=bn_affine), + nn.ReLU(), + nn.Conv2d(128, 768, 2, bias=False), + nn.BatchNorm2d(768, affine=bn_affine), + nn.ReLU() + ) + self.classifier = nn.Linear(768, num_classes) + self.gap = nn.AdaptiveAvgPool2d(1) + + def forward(self, x): + x = self.features(x) + x = self.gap(x) + x = self.classifier(x.view(x.size(0), -1)) + return x + + +class AuxiliaryHeadCIFAR(nn.Module): + + def __init__(self, C, size=5, num_classes=10): + """assuming input size 8x8""" + super(AuxiliaryHeadCIFAR, self).__init__() + self.features = nn.Sequential( + nn.ReLU(inplace=True), + nn.AvgPool2d(5, stride=3, padding=0, count_include_pad=False), # image size = 2 x 2 + nn.Conv2d(C, 128, 1, bias=False), + nn.BatchNorm2d(128), + nn.ReLU(inplace=True), + nn.Conv2d(128, 768, 2, bias=False), + nn.BatchNorm2d(768), + nn.ReLU(inplace=True) + ) + self.classifier = nn.Linear(768, num_classes) + + def forward(self, x): + x = self.features(x) + x = self.classifier(x.view(x.size(0), -1)) + return x + + +class AuxiliaryHeadImageNet(nn.Module): + + def __init__(self, C, size=5, num_classes=1000): + """assuming input size 7x7""" + super(AuxiliaryHeadImageNet, self).__init__() + self.features = nn.Sequential( + nn.ReLU(inplace=True), + nn.AvgPool2d(size, stride=2, padding=0, count_include_pad=False), + nn.Conv2d(C, 128, 1, bias=False), + nn.BatchNorm2d(128), + nn.ReLU(inplace=True), + nn.Conv2d(128, 768, 2, bias=False), + # NOTE: This batchnorm was omitted in my earlier implementation due to a typo. + # Commenting it out for consistency with the experiments in the paper. + # nn.BatchNorm2d(768), + nn.ReLU(inplace=True) + ) + self.classifier = nn.Linear(768, num_classes) + + def forward(self, x): + x = self.features(x) + x = self.classifier(x.view(x.size(0), -1)) + return x diff --git a/examples/nas/cdarts/config.py b/examples/nas/cdarts/config.py new file mode 100644 index 0000000000..2894edf7a8 --- /dev/null +++ b/examples/nas/cdarts/config.py @@ -0,0 +1,135 @@ +""" Config class for search/retrain """ +import argparse +from functools import partial + + +def get_parser(name): + """ make default formatted parser """ + parser = argparse.ArgumentParser(name, formatter_class=argparse.ArgumentDefaultsHelpFormatter) + # print default value always + parser.add_argument = partial(parser.add_argument, help=' ') + return parser + + +class BaseConfig(argparse.Namespace): + def print_params(self, prtf=print): + prtf("") + prtf("Parameters:") + for attr, value in sorted(vars(self).items()): + prtf("{}={}".format(attr.upper(), value)) + prtf("") + + def as_markdown(self): + """ Return configs as markdown format """ + text = "|name|value| \n|-|-| \n" + for attr, value in sorted(vars(self).items()): + text += "|{}|{}| \n".format(attr, value) + + return text + + +class SearchConfig(BaseConfig): + def build_parser(self): + parser = get_parser("Search config") + ########### basic settings ############ + parser.add_argument('--dataset', default='cifar10', choices=['cifar10', 'cifar100', 'imagenet']) + parser.add_argument('--n_classes', type=int, default=10) + parser.add_argument('--stem_multiplier', type=int, default=3) + parser.add_argument('--init_channels', type=int, default=16) + parser.add_argument('--data_dir', type=str, default='data/cifar', help='cifar dataset') + parser.add_argument('--output_path', type=str, default='./outputs', help='') + parser.add_argument('--batch_size', type=int, default=128, help='batch size') + parser.add_argument('--log_frequency', type=int, default=10, help='print frequency') + parser.add_argument('--seed', type=int, default=0, help='random seed') + parser.add_argument('--workers', type=int, default=4, help='# of workers') + parser.add_argument('--steps_per_epoch', type=int, default=None, help='how many steps per epoch, use None for one pass of dataset') + + ########### learning rate ############ + parser.add_argument('--w_lr', type=float, default=0.05, help='lr for weights') + parser.add_argument('--w_momentum', type=float, default=0.9, help='momentum for weights') + parser.add_argument('--w_weight_decay', type=float, default=3e-4, help='weight decay for weights') + parser.add_argument('--grad_clip', type=float, default=5., help='gradient clipping for weights') + parser.add_argument('--alpha_lr', type=float, default=6e-4, help='lr for alpha') + parser.add_argument('--alpha_weight_decay', type=float, default=1e-3, help='weight decay for alpha') + parser.add_argument('--nasnet_lr', type=float, default=0.1, help='lr of nasnet') + + ########### alternate training ############ + parser.add_argument('--epochs', type=int, default=32, help='# of search epochs') + parser.add_argument('--warmup_epochs', type=int, default=2, help='# warmup epochs of super model') + parser.add_argument('--loss_alpha', type=float, default=1, help='loss alpha') + parser.add_argument('--loss_T', type=float, default=2, help='loss temperature') + parser.add_argument('--interactive_type', type=str, default='kl', choices=['kl', 'smoothl1']) + parser.add_argument('--sync_bn', action='store_true', default=False, help='whether to sync bn') + parser.add_argument('--use_apex', action='store_true', default=False, help='whether to use apex') + parser.add_argument('--regular_ratio', type=float, default=0.5, help='regular ratio') + parser.add_argument('--regular_coeff', type=float, default=5, help='regular coefficient') + parser.add_argument('--fix_head', action='store_true', default=False, help='whether to fix head') + parser.add_argument('--share_module', action='store_true', default=False, help='whether to share stem and aux head') + + ########### data augument ############ + parser.add_argument('--aux_weight', type=float, default=0.4, help='auxiliary loss weight') + parser.add_argument('--cutout_length', type=int, default=16, help='cutout length') + parser.add_argument('--drop_path_prob', type=float, default=0.2, help='drop path prob') + parser.add_argument('--use_aa', action='store_true', default=False, help='whether to use aa') + parser.add_argument('--mixup_alpha', default=1., type=float, help='mixup interpolation coefficient (default: 1)') + + ########### distributed ############ + parser.add_argument("--local_rank", default=0, type=int) + parser.add_argument("--world_size", default=1, type=int) + parser.add_argument('--dist_url', default='tcp://127.0.0.1:23456', type=str, help='url used to set up distributed training') + parser.add_argument('--distributed', action='store_true', help='run model distributed mode') + + return parser + + def __init__(self): + parser = self.build_parser() + args = parser.parse_args() + super().__init__(**vars(args)) + + +class RetrainConfig(BaseConfig): + def build_parser(self): + parser = get_parser("Retrain config") + parser.add_argument('--dataset', default="cifar10", choices=['cifar10', 'cifar100', 'imagenet']) + parser.add_argument('--data_dir', type=str, default='data/cifar', help='cifar dataset') + parser.add_argument('--output_path', type=str, default='./outputs', help='') + parser.add_argument("--arc_checkpoint", default="epoch_02.json") + parser.add_argument('--log_frequency', type=int, default=10, help='print frequency') + + ########### model settings ############ + parser.add_argument('--n_classes', type=int, default=10) + parser.add_argument('--input_channels', type=int, default=3) + parser.add_argument('--stem_multiplier', type=int, default=3) + parser.add_argument('--batch_size', type=int, default=128, help='batch size') + parser.add_argument('--eval_batch_size', type=int, default=500, help='batch size for validation') + parser.add_argument('--lr', type=float, default=0.025, help='lr for weights') + parser.add_argument('--momentum', type=float, default=0.9, help='momentum') + parser.add_argument('--grad_clip', type=float, default=5., help='gradient clipping for weights') + parser.add_argument('--weight_decay', type=float, default=5e-4, help='weight decay') + parser.add_argument('--epochs', type=int, default=600, help='# of training epochs') + parser.add_argument('--warmup_epochs', type=int, default=5, help='# warmup') + parser.add_argument('--init_channels', type=int, default=36) + parser.add_argument('--layers', type=int, default=20, help='# of layers') + parser.add_argument('--seed', type=int, default=0, help='random seed') + parser.add_argument('--workers', type=int, default=4, help='# of workers') + parser.add_argument('--aux_weight', type=float, default=0.4, help='auxiliary loss weight') + parser.add_argument('--cutout_length', type=int, default=16, help='cutout length') + parser.add_argument('--label_smooth', type=float, default=0.1, help='label smoothing') + parser.add_argument('--drop_path_prob', type=float, default=0.3, help='drop path prob') + + ########### data augmentation ############ + parser.add_argument('--use_aa', action='store_true', default=False, help='whether to use aa') + parser.add_argument('--mixup_alpha', default=1., type=float, help='mixup interpolation coefficient') + + ########### distributed ############ + parser.add_argument("--local_rank", default=0, type=int) + parser.add_argument("--world_size", default=1, type=int) + parser.add_argument('--dist_url', default='tcp://127.0.0.1:23456', type=str, help='url used to set up distributed training') + parser.add_argument('--distributed', action='store_true', help='run model distributed mode') + + return parser + + def __init__(self): + parser = self.build_parser() + args = parser.parse_args() + super().__init__(**vars(args)) diff --git a/examples/nas/cdarts/datasets/cifar.py b/examples/nas/cdarts/datasets/cifar.py new file mode 100644 index 0000000000..ea9a03520c --- /dev/null +++ b/examples/nas/cdarts/datasets/cifar.py @@ -0,0 +1,108 @@ +import numpy as np +import torch +import torchvision.datasets as dset +import torchvision.transforms as transforms + +from datasets.data_utils import CIFAR10Policy, Cutout +from datasets.data_utils import SubsetDistributedSampler + + +def data_transforms_cifar(config, cutout=False): + CIFAR_MEAN = [0.49139968, 0.48215827, 0.44653124] + CIFAR_STD = [0.24703233, 0.24348505, 0.26158768] + + if config.use_aa: + train_transform = transforms.Compose([ + transforms.RandomCrop(32, padding=4, fill=128), + transforms.RandomHorizontalFlip(), CIFAR10Policy(), + transforms.ToTensor(), + transforms.Normalize(CIFAR_MEAN, CIFAR_STD), + ]) + else: + train_transform = transforms.Compose([ + transforms.RandomCrop(32, padding=4), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(CIFAR_MEAN, CIFAR_STD), + ]) + + if cutout: + train_transform.transforms.append(Cutout(config.cutout_length)) + + valid_transform = transforms.Compose([ + transforms.ToTensor(), + transforms.Normalize(CIFAR_MEAN, CIFAR_STD), + ]) + return train_transform, valid_transform + + +def get_search_datasets(config): + dataset = config.dataset.lower() + if dataset == 'cifar10': + dset_cls = dset.CIFAR10 + n_classes = 10 + elif dataset == 'cifar100': + dset_cls = dset.CIFAR100 + n_classes = 100 + else: + raise Exception("Not support dataset!") + + train_transform, valid_transform = data_transforms_cifar(config, cutout=False) + train_data = dset_cls(root=config.data_dir, train=True, download=True, transform=train_transform) + test_data = dset_cls(root=config.data_dir, train=False, download=True, transform=valid_transform) + + num_train = len(train_data) + indices = list(range(num_train)) + split_mid = int(np.floor(0.5 * num_train)) + + if config.distributed: + train_sampler = SubsetDistributedSampler(train_data, indices[:split_mid]) + valid_sampler = SubsetDistributedSampler(train_data, indices[split_mid:num_train]) + else: + train_sampler = torch.utils.data.sampler.SubsetRandomSampler(indices[:split_mid]) + valid_sampler = torch.utils.data.sampler.SubsetRandomSampler(indices[split_mid:num_train]) + + train_loader = torch.utils.data.DataLoader( + train_data, batch_size=config.batch_size, + sampler=train_sampler, + pin_memory=False, num_workers=config.workers) + + valid_loader = torch.utils.data.DataLoader( + train_data, batch_size=config.batch_size, + sampler=valid_sampler, + pin_memory=False, num_workers=config.workers) + + return [train_loader, valid_loader], [train_sampler, valid_sampler] + + +def get_augment_datasets(config): + dataset = config.dataset.lower() + if dataset == 'cifar10': + dset_cls = dset.CIFAR10 + elif dataset == 'cifar100': + dset_cls = dset.CIFAR100 + else: + raise Exception("Not support dataset!") + + train_transform, valid_transform = data_transforms_cifar(config, cutout=True) + train_data = dset_cls(root=config.data_dir, train=True, download=True, transform=train_transform) + test_data = dset_cls(root=config.data_dir, train=False, download=True, transform=valid_transform) + + if config.distributed: + train_sampler = torch.utils.data.distributed.DistributedSampler(train_data) + test_sampler = torch.utils.data.distributed.DistributedSampler(test_data) + else: + train_sampler = None + test_sampler = None + + train_loader = torch.utils.data.DataLoader( + train_data, batch_size=config.batch_size, + sampler=train_sampler, + pin_memory=True, num_workers=config.workers) + + test_loader = torch.utils.data.DataLoader( + test_data, batch_size=config.eval_batch_size, + sampler=test_sampler, + pin_memory=True, num_workers=config.workers) + + return [train_loader, test_loader], [train_sampler, test_sampler] diff --git a/examples/nas/cdarts/datasets/data_utils.py b/examples/nas/cdarts/datasets/data_utils.py new file mode 100644 index 0000000000..5989d274f9 --- /dev/null +++ b/examples/nas/cdarts/datasets/data_utils.py @@ -0,0 +1,398 @@ +import math +import random + +import numpy as np +import torch +import torch.distributed as dist +from PIL import Image, ImageEnhance, ImageOps +from torch.utils.data import Sampler + + +class SubsetDistributedSampler(Sampler): + """Sampler that restricts data loading to a subset of the dataset. + + It is especially useful in conjunction with + :class:`torch.nn.parallel.DistributedDataParallel`. In such case, each + process can pass a DistributedSampler instance as a DataLoader sampler, + and load a subset of the original dataset that is exclusive to it. + + .. note:: + Dataset is assumed to be of constant size. + + Arguments: + dataset: Dataset used for sampling. + num_replicas (optional): Number of processes participating in + distributed training. + rank (optional): Rank of the current process within num_replicas. + shuffle (optional): If true (default), sampler will shuffle the indices + """ + + def __init__(self, dataset, indices, num_replicas=None, rank=None, shuffle=True): + if num_replicas is None: + if not dist.is_available(): + raise RuntimeError("Requires distributed package to be available") + num_replicas = dist.get_world_size() + if rank is None: + if not dist.is_available(): + raise RuntimeError("Requires distributed package to be available") + rank = dist.get_rank() + self.dataset = dataset + self.num_replicas = num_replicas + self.rank = rank + self.epoch = 0 + self.indices = indices + self.num_samples = int(math.ceil(len(self.indices) * 1.0 / self.num_replicas)) + self.total_size = self.num_samples * self.num_replicas + self.shuffle = shuffle + + def __iter__(self): + # deterministically shuffle based on epoch + g = torch.Generator() + g.manual_seed(self.epoch) + if self.shuffle: + # indices = torch.randperm(len(self.dataset), generator=g).tolist() + indices = list(self.indices[i] for i in torch.randperm(len(self.indices))) + else: + # indices = list(range(len(self.dataset))) + indices = self.indices + + # add extra samples to make it evenly divisible + indices += indices[:(self.total_size - len(indices))] + assert len(indices) == self.total_size + + # subsample + indices = indices[self.rank:self.total_size:self.num_replicas] + assert len(indices) == self.num_samples + + return iter(indices) + + def __len__(self): + return self.num_samples + + def set_epoch(self, epoch): + self.epoch = epoch + + +class data_prefetcher(): + def __init__(self, loader): + self.loader = iter(loader) + self.stream = torch.cuda.Stream() + self.mean = torch.tensor([0.485 * 255, 0.456 * 255, 0.406 * 255]).cuda().view(1, 3, 1, 1) + self.std = torch.tensor([0.229 * 255, 0.224 * 255, 0.225 * 255]).cuda().view(1, 3, 1, 1) + # With Amp, it isn't necessary to manually convert data to half. + # if args.fp16: + # self.mean = self.mean.half() + # self.std = self.std.half() + self.preload() + + def preload(self): + try: + self.next_input, self.next_target = next(self.loader) + except StopIteration: + self.next_input = None + self.next_target = None + return + with torch.cuda.stream(self.stream): + self.next_input = self.next_input.cuda(non_blocking=True) + self.next_target = self.next_target.cuda(non_blocking=True) + # With Amp, it isn't necessary to manually convert data to half. + # if args.fp16: + # self.next_input = self.next_input.half() + # else: + self.next_input = self.next_input.float() + self.next_input = self.next_input.sub_(self.mean).div_(self.std) + + def next(self): + torch.cuda.current_stream().wait_stream(self.stream) + input = self.next_input + target = self.next_target + self.preload() + return input, target + + +class Cutout(object): + def __init__(self, length): + self.length = length + + def __call__(self, img): + h, w = img.size(1), img.size(2) + mask = np.ones((h, w), np.float32) + y = np.random.randint(h) + x = np.random.randint(w) + + y1 = np.clip(y - self.length // 2, 0, h) + y2 = np.clip(y + self.length // 2, 0, h) + x1 = np.clip(x - self.length // 2, 0, w) + x2 = np.clip(x + self.length // 2, 0, w) + + mask[y1: y2, x1: x2] = 0. + mask = torch.from_numpy(mask) + mask = mask.expand_as(img) + img *= mask + + return img + + +class ImageNetPolicy(object): + """ Randomly choose one of the best 24 Sub-policies on ImageNet. + Example: + >>> policy = ImageNetPolicy() + >>> transformed = policy(image) + Example as a PyTorch Transform: + >>> transform=transforms.Compose([ + >>> transforms.Resize(256), + >>> ImageNetPolicy(), + >>> transforms.ToTensor()]) + """ + + def __init__(self, fillcolor=(128, 128, 128)): + self.policies = [ + SubPolicy(0.4, "posterize", 8, 0.6, "rotate", 9, fillcolor), + SubPolicy(0.6, "solarize", 5, 0.6, "autocontrast", 5, fillcolor), + SubPolicy(0.8, "equalize", 8, 0.6, "equalize", 3, fillcolor), + SubPolicy(0.6, "posterize", 7, 0.6, "posterize", 6, fillcolor), + SubPolicy(0.4, "equalize", 7, 0.2, "solarize", 4, fillcolor), + + SubPolicy(0.4, "equalize", 4, 0.8, "rotate", 8, fillcolor), + SubPolicy(0.6, "solarize", 3, 0.6, "equalize", 7, fillcolor), + SubPolicy(0.8, "posterize", 5, 1.0, "equalize", 2, fillcolor), + SubPolicy(0.2, "rotate", 3, 0.6, "solarize", 8, fillcolor), + SubPolicy(0.6, "equalize", 8, 0.4, "posterize", 6, fillcolor), + + SubPolicy(0.8, "rotate", 8, 0.4, "color", 0, fillcolor), + SubPolicy(0.4, "rotate", 9, 0.6, "equalize", 2, fillcolor), + SubPolicy(0.0, "equalize", 7, 0.8, "equalize", 8, fillcolor), + SubPolicy(0.6, "invert", 4, 1.0, "equalize", 8, fillcolor), + SubPolicy(0.6, "color", 4, 1.0, "contrast", 8, fillcolor), + + SubPolicy(0.8, "rotate", 8, 1.0, "color", 2, fillcolor), + SubPolicy(0.8, "color", 8, 0.8, "solarize", 7, fillcolor), + SubPolicy(0.4, "sharpness", 7, 0.6, "invert", 8, fillcolor), + SubPolicy(0.6, "shearX", 5, 1.0, "equalize", 9, fillcolor), + SubPolicy(0.4, "color", 0, 0.6, "equalize", 3, fillcolor), + + SubPolicy(0.4, "equalize", 7, 0.2, "solarize", 4, fillcolor), + SubPolicy(0.6, "solarize", 5, 0.6, "autocontrast", 5, fillcolor), + SubPolicy(0.6, "invert", 4, 1.0, "equalize", 8, fillcolor), + SubPolicy(0.6, "color", 4, 1.0, "contrast", 8, fillcolor), + SubPolicy(0.8, "equalize", 8, 0.6, "equalize", 3, fillcolor) + ] + + def __call__(self, img): + policy_idx = random.randint(0, len(self.policies) - 1) + return self.policies[policy_idx](img) + + def __repr__(self): + return "AutoAugment ImageNet Policy" + + +class CIFAR10Policy(object): + """ Randomly choose one of the best 25 Sub-policies on CIFAR10. + Example: + >>> policy = CIFAR10Policy() + >>> transformed = policy(image) + Example as a PyTorch Transform: + >>> transform=transforms.Compose([ + >>> transforms.Resize(256), + >>> CIFAR10Policy(), + >>> transforms.ToTensor()]) + """ + + def __init__(self, fillcolor=(128, 128, 128)): + self.policies = [ + SubPolicy(0.1, "invert", 7, 0.2, "contrast", 6, fillcolor), + SubPolicy(0.7, "rotate", 2, 0.3, "translateX", 9, fillcolor), + SubPolicy(0.8, "sharpness", 1, 0.9, "sharpness", 3, fillcolor), + SubPolicy(0.5, "shearY", 8, 0.7, "translateY", 9, fillcolor), + SubPolicy(0.5, "autocontrast", 8, 0.9, "equalize", 2, fillcolor), + + SubPolicy(0.2, "shearY", 7, 0.3, "posterize", 7, fillcolor), + SubPolicy(0.4, "color", 3, 0.6, "brightness", 7, fillcolor), + SubPolicy(0.3, "sharpness", 9, 0.7, "brightness", 9, fillcolor), + SubPolicy(0.6, "equalize", 5, 0.5, "equalize", 1, fillcolor), + SubPolicy(0.6, "contrast", 7, 0.6, "sharpness", 5, fillcolor), + + SubPolicy(0.7, "color", 7, 0.5, "translateX", 8, fillcolor), + SubPolicy(0.3, "equalize", 7, 0.4, "autocontrast", 8, fillcolor), + SubPolicy(0.4, "translateY", 3, 0.2, "sharpness", 6, fillcolor), + SubPolicy(0.9, "brightness", 6, 0.2, "color", 8, fillcolor), + SubPolicy(0.5, "solarize", 2, 0.0, "invert", 3, fillcolor), + + SubPolicy(0.2, "equalize", 0, 0.6, "autocontrast", 0, fillcolor), + SubPolicy(0.2, "equalize", 8, 0.6, "equalize", 4, fillcolor), + SubPolicy(0.9, "color", 9, 0.6, "equalize", 6, fillcolor), + SubPolicy(0.8, "autocontrast", 4, 0.2, "solarize", 8, fillcolor), + SubPolicy(0.1, "brightness", 3, 0.7, "color", 0, fillcolor), + + SubPolicy(0.4, "solarize", 5, 0.9, "autocontrast", 3, fillcolor), + SubPolicy(0.9, "translateY", 9, 0.7, "translateY", 9, fillcolor), + SubPolicy(0.9, "autocontrast", 2, 0.8, "solarize", 3, fillcolor), + SubPolicy(0.8, "equalize", 8, 0.1, "invert", 3, fillcolor), + SubPolicy(0.7, "translateY", 9, 0.9, "autocontrast", 1, fillcolor) + ] + + def __call__(self, img): + policy_idx = random.randint(0, len(self.policies) - 1) + return self.policies[policy_idx](img) + + def __repr__(self): + return "AutoAugment CIFAR10 Policy" + + +class SVHNPolicy(object): + """ Randomly choose one of the best 25 Sub-policies on SVHN. + Example: + >>> policy = SVHNPolicy() + >>> transformed = policy(image) + Example as a PyTorch Transform: + >>> transform=transforms.Compose([ + >>> transforms.Resize(256), + >>> SVHNPolicy(), + >>> transforms.ToTensor()]) + """ + + def __init__(self, fillcolor=(128, 128, 128)): + self.policies = [ + SubPolicy(0.9, "shearX", 4, 0.2, "invert", 3, fillcolor), + SubPolicy(0.9, "shearY", 8, 0.7, "invert", 5, fillcolor), + SubPolicy(0.6, "equalize", 5, 0.6, "solarize", 6, fillcolor), + SubPolicy(0.9, "invert", 3, 0.6, "equalize", 3, fillcolor), + SubPolicy(0.6, "equalize", 1, 0.9, "rotate", 3, fillcolor), + + SubPolicy(0.9, "shearX", 4, 0.8, "autocontrast", 3, fillcolor), + SubPolicy(0.9, "shearY", 8, 0.4, "invert", 5, fillcolor), + SubPolicy(0.9, "shearY", 5, 0.2, "solarize", 6, fillcolor), + SubPolicy(0.9, "invert", 6, 0.8, "autocontrast", 1, fillcolor), + SubPolicy(0.6, "equalize", 3, 0.9, "rotate", 3, fillcolor), + + SubPolicy(0.9, "shearX", 4, 0.3, "solarize", 3, fillcolor), + SubPolicy(0.8, "shearY", 8, 0.7, "invert", 4, fillcolor), + SubPolicy(0.9, "equalize", 5, 0.6, "translateY", 6, fillcolor), + SubPolicy(0.9, "invert", 4, 0.6, "equalize", 7, fillcolor), + SubPolicy(0.3, "contrast", 3, 0.8, "rotate", 4, fillcolor), + + SubPolicy(0.8, "invert", 5, 0.0, "translateY", 2, fillcolor), + SubPolicy(0.7, "shearY", 6, 0.4, "solarize", 8, fillcolor), + SubPolicy(0.6, "invert", 4, 0.8, "rotate", 4, fillcolor), + SubPolicy(0.3, "shearY", 7, 0.9, "translateX", 3, fillcolor), + SubPolicy(0.1, "shearX", 6, 0.6, "invert", 5, fillcolor), + + SubPolicy(0.7, "solarize", 2, 0.6, "translateY", 7, fillcolor), + SubPolicy(0.8, "shearY", 4, 0.8, "invert", 8, fillcolor), + SubPolicy(0.7, "shearX", 9, 0.8, "translateY", 3, fillcolor), + SubPolicy(0.8, "shearY", 5, 0.7, "autocontrast", 3, fillcolor), + SubPolicy(0.7, "shearX", 2, 0.1, "invert", 5, fillcolor) + ] + + def __call__(self, img): + policy_idx = random.randint(0, len(self.policies) - 1) + return self.policies[policy_idx](img) + + def __repr__(self): + return "AutoAugment SVHN Policy" + + +class SubPolicy(object): + def __init__(self, p1, operation1, magnitude_idx1, p2, operation2, magnitude_idx2, fillcolor=(128, 128, 128)): + ranges = { + "shearX": np.linspace(0, 0.3, 10), + "shearY": np.linspace(0, 0.3, 10), + "translateX": np.linspace(0, 150 / 331, 10), + "translateY": np.linspace(0, 150 / 331, 10), + "rotate": np.linspace(0, 30, 10), + "color": np.linspace(0.0, 0.9, 10), + "posterize": np.round(np.linspace(8, 4, 10), 0).astype(np.int), + "solarize": np.linspace(256, 0, 10), + "contrast": np.linspace(0.0, 0.9, 10), + "sharpness": np.linspace(0.0, 0.9, 10), + "brightness": np.linspace(0.0, 0.9, 10), + "autocontrast": [0] * 10, + "equalize": [0] * 10, + "invert": [0] * 10 + } + + # from https://stackoverflow.com/questions/5252170/specify-image-filling-color-when-rotating-in-python-with-pil-and-setting-expand + def rotate_with_fill(img, magnitude): + rot = img.convert("RGBA").rotate(magnitude) + return Image.composite(rot, Image.new("RGBA", rot.size, (128,) * 4), rot).convert(img.mode) + + func = { + "shearX": lambda img, magnitude: img.transform( + img.size, Image.AFFINE, (1, magnitude * random.choice([-1, 1]), 0, 0, 1, 0), + Image.BICUBIC, fillcolor=fillcolor), + "shearY": lambda img, magnitude: img.transform( + img.size, Image.AFFINE, (1, 0, 0, magnitude * random.choice([-1, 1]), 1, 0), + Image.BICUBIC, fillcolor=fillcolor), + "translateX": lambda img, magnitude: img.transform( + img.size, Image.AFFINE, (1, 0, magnitude * img.size[0] * random.choice([-1, 1]), 0, 1, 0), + fillcolor=fillcolor), + "translateY": lambda img, magnitude: img.transform( + img.size, Image.AFFINE, (1, 0, 0, 0, 1, magnitude * img.size[1] * random.choice([-1, 1])), + fillcolor=fillcolor), + "rotate": lambda img, magnitude: rotate_with_fill(img, magnitude), + "color": lambda img, magnitude: ImageEnhance.Color(img).enhance(1 + magnitude * random.choice([-1, 1])), + "posterize": lambda img, magnitude: ImageOps.posterize(img, magnitude), + "solarize": lambda img, magnitude: ImageOps.solarize(img, magnitude), + "contrast": lambda img, magnitude: ImageEnhance.Contrast(img).enhance( + 1 + magnitude * random.choice([-1, 1])), + "sharpness": lambda img, magnitude: ImageEnhance.Sharpness(img).enhance( + 1 + magnitude * random.choice([-1, 1])), + "brightness": lambda img, magnitude: ImageEnhance.Brightness(img).enhance( + 1 + magnitude * random.choice([-1, 1])), + "autocontrast": lambda img, magnitude: ImageOps.autocontrast(img), + "equalize": lambda img, magnitude: ImageOps.equalize(img), + "invert": lambda img, magnitude: ImageOps.invert(img) + } + + self.p1 = p1 + self.operation1 = func[operation1] + self.magnitude1 = ranges[operation1][magnitude_idx1] + self.p2 = p2 + self.operation2 = func[operation2] + self.magnitude2 = ranges[operation2][magnitude_idx2] + + def __call__(self, img): + if random.random() < self.p1: + img = self.operation1(img, self.magnitude1) + if random.random() < self.p2: + img = self.operation2(img, self.magnitude2) + return img + + +def fast_collate(batch): + imgs = [img[0] for img in batch] + targets = torch.tensor([target[1] for target in batch], dtype=torch.int64) + w = imgs[0].size[0] + h = imgs[0].size[1] + tensor = torch.zeros((len(imgs), 3, h, w), dtype=torch.uint8) + for i, img in enumerate(imgs): + nump_array = np.asarray(img, dtype=np.uint8) + if (nump_array.ndim < 3): + nump_array = np.expand_dims(nump_array, axis=-1) + nump_array = np.rollaxis(nump_array, 2) + + tensor[i] += torch.from_numpy(nump_array) + + return tensor, targets + + +def mixup_data(x, y, alpha=1.0, use_cuda=True): + '''Returns mixed inputs, pairs of targets, and lambda''' + if alpha > 0: + lam = np.random.beta(alpha, alpha) + else: + lam = 1 + + batch_size = x.size()[0] + if use_cuda: + index = torch.randperm(batch_size).cuda() + else: + index = torch.randperm(batch_size) + + mixed_x = lam * x + (1 - lam) * x[index, :] + y_a, y_b = y, y[index] + return mixed_x, y_a, y_b, lam + + +def mixup_criterion(criterion, pred, y_a, y_b, lam): + return lam * criterion(pred, y_a) + (1 - lam) * criterion(pred, y_b) diff --git a/examples/nas/cdarts/datasets/imagenet.py b/examples/nas/cdarts/datasets/imagenet.py new file mode 100644 index 0000000000..c803a76755 --- /dev/null +++ b/examples/nas/cdarts/datasets/imagenet.py @@ -0,0 +1,95 @@ +import numpy as np +import torch +import torchvision.datasets as dset +import torchvision.transforms as transforms + +from datasets.data_utils import ImageNetPolicy +from datasets.data_utils import SubsetDistributedSampler + + +def _imagenet_dataset(config): + normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) + train_dir = os.path.join(config.data_dir, "train") + test_dir = os.path.join(config.data_dir, "val") + if hasattr(config, "use_aa") and config.use_aa: + train_data = dset.ImageFolder( + train_dir, + transforms.Compose([ + transforms.RandomResizedCrop(224), + transforms.RandomHorizontalFlip(), + ImageNetPolicy(), + transforms.ToTensor(), + normalize, + ])) + else: + train_data = dset.ImageFolder( + train_dir, + transforms.Compose([ + transforms.RandomResizedCrop(224), + transforms.RandomHorizontalFlip(), + transforms.ColorJitter( + brightness=0.4, + contrast=0.4, + saturation=0.4, + hue=0.2), + transforms.ToTensor(), + normalize, + ])) + + test_data = dset.ImageFolder( + test_dir, + transforms.Compose([ + transforms.Resize(256), + transforms.CenterCrop(224), + transforms.ToTensor(), + normalize, + ])) + + return train_data, test_data + + +def get_search_datasets(config): + train_data, test_data = _imagenet_dataset(config) + num_train = len(train_data) + indices = list(range(num_train)) + split_mid = int(np.floor(0.5 * num_train)) + + if config.distributed: + train_sampler = SubsetDistributedSampler(train_data, indices[:split_mid]) + valid_sampler = SubsetDistributedSampler(train_data, indices[split_mid:num_train]) + else: + train_sampler = torch.utils.data.sampler.SubsetRandomSampler(indices[:split_mid]) + valid_sampler = torch.utils.data.sampler.SubsetRandomSampler(indices[split_mid:num_train]) + + train_loader = torch.utils.data.DataLoader( + train_data, batch_size=config.batch_size, + sampler=train_sampler, + pin_memory=True, num_workers=config.workers) + + valid_loader = torch.utils.data.DataLoader( + train_data, batch_size=config.batch_size, + sampler=valid_sampler, + pin_memory=True, num_workers=config.workers) + + return [train_loader, valid_loader], [train_sampler, valid_sampler] + + +def get_augment_datasets(config): + train_data, test_data = _imagenet_dataset(config) + if config.distributed: + train_sampler = torch.utils.data.distributed.DistributedSampler(train_data) + test_sampler = torch.utils.data.distributed.DistributedSampler(test_data) + else: + train_sampler = test_sampler = None + + train_loader = torch.utils.data.DataLoader( + train_data, batch_size=config.batch_size, + sampler=train_sampler, + pin_memory=True, num_workers=config.workers) + + test_loader = torch.utils.data.DataLoader( + test_data, batch_size=config.batch_size, + sampler=test_sampler, + pin_memory=True, num_workers=config.workers) + + return [train_loader, test_loader], [train_sampler, test_sampler] diff --git a/examples/nas/cdarts/genotypes.py b/examples/nas/cdarts/genotypes.py new file mode 100644 index 0000000000..7619cfb791 --- /dev/null +++ b/examples/nas/cdarts/genotypes.py @@ -0,0 +1,163 @@ +""" Genotypes + - Genotype: normal/reduce gene + normal/reduce cell output connection (concat) + - gene: discrete ops information (w/o output connection) + - dag: real ops (can be mixed or discrete, but Genotype has only discrete information itself) +""" +from collections import namedtuple + +import torch +import torch.nn as nn +import torch.nn.functional as F + +import ops +from ops import PRIMITIVES + +Genotype = namedtuple('Genotype', 'normal normal_concat reduce reduce_concat') + + +def to_dag(C_in, gene, reduction, bn_affine=True): + """ generate discrete ops from gene """ + dag = nn.ModuleList() + for edges in gene: + row = nn.ModuleList() + for op_name, s_idx in edges: + # reduction cell & from input nodes => stride = 2 + stride = 2 if reduction and s_idx < 2 else 1 + op = ops.OPS[op_name](C_in, stride, bn_affine) + if not isinstance(op, ops.Identity): # Identity does not use drop path + op = nn.Sequential( + op, + ops.DropPath_() + ) + op.s_idx = s_idx + row.append(op) + dag.append(row) + + return dag + + +def from_str(s): + """ generate genotype from string + e.g. "Genotype( + normal=[[('sep_conv_3x3', 0), ('sep_conv_3x3', 1)], + [('sep_conv_3x3', 1), ('dil_conv_3x3', 2)], + [('sep_conv_3x3', 1), ('sep_conv_3x3', 2)], + [('sep_conv_3x3', 1), ('dil_conv_3x3', 4)]], + normal_concat=range(2, 6), + reduce=[[('max_pool_3x3', 0), ('max_pool_3x3', 1)], + [('max_pool_3x3', 0), ('skip_connect', 2)], + [('max_pool_3x3', 0), ('skip_connect', 2)], + [('max_pool_3x3', 0), ('skip_connect', 2)]], + reduce_concat=range(2, 6))" + """ + + genotype = eval(s) + + return genotype + + +def parse(alpha, beta, k): + """ + parse continuous alpha to discrete gene. + alpha is ParameterList: + ParameterList [ + Parameter(n_edges1, n_ops), + Parameter(n_edges2, n_ops), + ... + ] + + beta is ParameterList: + ParameterList [ + Parameter(n_edges1), + Parameter(n_edges2), + ... + ] + + gene is list: + [ + [('node1_ops_1', node_idx), ..., ('node1_ops_k', node_idx)], + [('node2_ops_1', node_idx), ..., ('node2_ops_k', node_idx)], + ... + ] + each node has two edges (k=2) in CNN. + """ + + gene = [] + assert PRIMITIVES[-1] == 'none' # 'none' is implemented in mutator now + + # 1) Convert the mixed op to discrete edge (single op) by choosing top-1 weight edge + # 2) Choose top-k edges per node by edge score (top-1 weight in edge) + # output the connect idx[(node_idx, connect_idx, op_idx).... () ()] + connect_idx = [] + for edges, w in zip(alpha, beta): + # edges: Tensor(n_edges, n_ops) + edge_max, primitive_indices = torch.topk((w.view(-1, 1) * edges)[:, :-1], 1) # ignore 'none' + topk_edge_values, topk_edge_indices = torch.topk(edge_max.view(-1), k) + node_gene = [] + node_idx = [] + for edge_idx in topk_edge_indices: + prim_idx = primitive_indices[edge_idx] + prim = PRIMITIVES[prim_idx] + node_gene.append((prim, edge_idx.item())) + node_idx.append((edge_idx.item(), prim_idx.item())) + + gene.append(node_gene) + connect_idx.append(node_idx) + + return gene, connect_idx + + +def parse_gumbel(alpha, beta, k): + """ + parse continuous alpha to discrete gene. + alpha is ParameterList: + ParameterList [ + Parameter(n_edges1, n_ops), + Parameter(n_edges2, n_ops), + ... + ] + + beta is ParameterList: + ParameterList [ + Parameter(n_edges1), + Parameter(n_edges2), + ... + ] + + gene is list: + [ + [('node1_ops_1', node_idx), ..., ('node1_ops_k', node_idx)], + [('node2_ops_1', node_idx), ..., ('node2_ops_k', node_idx)], + ... + ] + each node has two edges (k=2) in CNN. + """ + + gene = [] + assert PRIMITIVES[-1] == 'none' # assume last PRIMITIVE is 'none' + + # 1) Convert the mixed op to discrete edge (single op) by choosing top-1 weight edge + # 2) Choose top-k edges per node by edge score (top-1 weight in edge) + # output the connect idx[(node_idx, connect_idx, op_idx).... () ()] + connect_idx = [] + for edges, w in zip(alpha, beta): + # edges: Tensor(n_edges, n_ops) + discrete_a = F.gumbel_softmax(edges[:, :-1].reshape(-1), tau=1, hard=True) + for i in range(k-1): + discrete_a = discrete_a + F.gumbel_softmax(edges[:, :-1].reshape(-1), tau=1, hard=True) + discrete_a = discrete_a.reshape(-1, len(PRIMITIVES)-1) + reserved_edge = (discrete_a > 0).nonzero() + + node_gene = [] + node_idx = [] + for i in range(reserved_edge.shape[0]): + edge_idx = reserved_edge[i][0].item() + prim_idx = reserved_edge[i][1].item() + prim = PRIMITIVES[prim_idx] + node_gene.append((prim, edge_idx)) + node_idx.append((edge_idx, prim_idx)) + + gene.append(node_gene) + connect_idx.append(node_idx) + + return gene, connect_idx diff --git a/examples/nas/cdarts/images/cell1.png b/examples/nas/cdarts/images/cell1.png new file mode 100644 index 0000000000000000000000000000000000000000..597d3bc42b2bebe56b120384f8d4874424cb3223 GIT binary patch literal 28026 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 K@M@*Uul^6gcHle! literal 0 HcmV?d00001 diff --git a/examples/nas/cdarts/images/cell3.png b/examples/nas/cdarts/images/cell3.png new file mode 100644 index 0000000000000000000000000000000000000000..741bbbea236dcac8b341cdd358f542d08e26dac3 GIT binary patch literal 36654 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�_vk?EOI} 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 hYK`jFaYN+Lv#?*(GG&_L3W1^RXMSTrT4^ZZvPI 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 literal 0 HcmV?d00001 diff --git a/examples/nas/cdarts/model.py b/examples/nas/cdarts/model.py new file mode 100644 index 0000000000..0514004a5e --- /dev/null +++ b/examples/nas/cdarts/model.py @@ -0,0 +1,162 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + +import torch +import torch.nn as nn +import torch.nn.functional as F + +import ops +import numpy as np +from nni.nas.pytorch import mutables +from utils import parse_results +from aux_head import DistillHeadCIFAR, DistillHeadImagenet, AuxiliaryHeadCIFAR, AuxiliaryHeadImageNet + + +class Node(nn.Module): + def __init__(self, node_id, num_prev_nodes, channels, num_downsample_connect): + super().__init__() + self.ops = nn.ModuleList() + choice_keys = [] + for i in range(num_prev_nodes): + stride = 2 if i < num_downsample_connect else 1 + choice_keys.append("{}_p{}".format(node_id, i)) + self.ops.append(mutables.LayerChoice([ops.OPS[k](channels, stride, False) for k in ops.PRIMITIVES], + key=choice_keys[-1])) + self.drop_path = ops.DropPath() + self.input_switch = mutables.InputChoice(choose_from=choice_keys, n_chosen=2, key="{}_switch".format(node_id)) + + def forward(self, prev_nodes): + assert len(self.ops) == len(prev_nodes) + out = [op(node) for op, node in zip(self.ops, prev_nodes)] + out = [self.drop_path(o) if o is not None else None for o in out] + return self.input_switch(out) + + +class Cell(nn.Module): + + def __init__(self, n_nodes, channels_pp, channels_p, channels, reduction_p, reduction): + super().__init__() + self.reduction = reduction + self.n_nodes = n_nodes + + # If previous cell is reduction cell, current input size does not match with + # output size of cell[k-2]. So the output[k-2] should be reduced by preprocessing. + if reduction_p: + self.preproc0 = ops.FactorizedReduce(channels_pp, channels, affine=False) + else: + self.preproc0 = ops.StdConv(channels_pp, channels, 1, 1, 0, affine=False) + self.preproc1 = ops.StdConv(channels_p, channels, 1, 1, 0, affine=False) + + # generate dag + self.mutable_ops = nn.ModuleList() + for depth in range(2, self.n_nodes + 2): + self.mutable_ops.append(Node("{}_n{}".format("reduce" if reduction else "normal", depth), + depth, channels, 2 if reduction else 0)) + + def forward(self, s0, s1): + # s0, s1 are the outputs of previous previous cell and previous cell, respectively. + tensors = [self.preproc0(s0), self.preproc1(s1)] + for node in self.mutable_ops: + cur_tensor = node(tensors) + tensors.append(cur_tensor) + + output = torch.cat(tensors[2:], dim=1) + return output + + +class Model(nn.Module): + + def __init__(self, dataset, n_layers, in_channels=3, channels=16, n_nodes=4, retrain=False, shared_modules=None): + super().__init__() + assert dataset in ["cifar10", "imagenet"] + self.dataset = dataset + self.input_size = 32 if dataset == "cifar" else 224 + self.in_channels = in_channels + self.channels = channels + self.n_nodes = n_nodes + self.aux_size = {2 * n_layers // 3: self.input_size // 4} + if dataset == "cifar10": + self.n_classes = 10 + self.aux_head_class = AuxiliaryHeadCIFAR if retrain else DistillHeadCIFAR + if not retrain: + self.aux_size = {n_layers // 3: 6, 2 * n_layers // 3: 6} + elif dataset == "imagenet": + self.n_classes = 1000 + self.aux_head_class = AuxiliaryHeadImageNet if retrain else DistillHeadImagenet + if not retrain: + self.aux_size = {n_layers // 3: 6, 2 * n_layers // 3: 5} + self.n_layers = n_layers + self.aux_head = nn.ModuleDict() + self.ensemble_param = nn.Parameter(torch.rand(len(self.aux_size) + 1) / (len(self.aux_size) + 1)) \ + if not retrain else None + + stem_multiplier = 3 if dataset == "cifar" else 1 + c_cur = stem_multiplier * self.channels + self.shared_modules = {} # do not wrap with ModuleDict + if shared_modules is not None: + self.stem = shared_modules["stem"] + else: + self.stem = nn.Sequential( + nn.Conv2d(in_channels, c_cur, 3, 1, 1, bias=False), + nn.BatchNorm2d(c_cur) + ) + self.shared_modules["stem"] = self.stem + + # for the first cell, stem is used for both s0 and s1 + # [!] channels_pp and channels_p is output channel size, but c_cur is input channel size. + channels_pp, channels_p, c_cur = c_cur, c_cur, channels + + self.cells = nn.ModuleList() + reduction_p, reduction = False, False + aux_head_count = 0 + for i in range(n_layers): + reduction_p, reduction = reduction, False + if i in [n_layers // 3, 2 * n_layers // 3]: + c_cur *= 2 + reduction = True + + cell = Cell(n_nodes, channels_pp, channels_p, c_cur, reduction_p, reduction) + self.cells.append(cell) + c_cur_out = c_cur * n_nodes + if i in self.aux_size: + if shared_modules is not None: + self.aux_head[str(i)] = shared_modules["aux" + str(aux_head_count)] + else: + self.aux_head[str(i)] = self.aux_head_class(c_cur_out, self.aux_size[i], self.n_classes) + self.shared_modules["aux" + str(aux_head_count)] = self.aux_head[str(i)] + aux_head_count += 1 + channels_pp, channels_p = channels_p, c_cur_out + + self.gap = nn.AdaptiveAvgPool2d(1) + self.linear = nn.Linear(channels_p, self.n_classes) + + def forward(self, x): + s0 = s1 = self.stem(x) + outputs = [] + + for i, cell in enumerate(self.cells): + s0, s1 = s1, cell(s0, s1) + if str(i) in self.aux_head: + outputs.append(self.aux_head[str(i)](s1)) + + out = self.gap(s1) + out = out.view(out.size(0), -1) # flatten + logits = self.linear(out) + outputs.append(logits) + + if self.ensemble_param is None: + assert len(outputs) == 2 + return outputs[1], outputs[0] + else: + em_output = torch.cat([(e * o) for e, o in zip(F.softmax(self.ensemble_param, dim=0), outputs)], 0) + return logits, em_output + + def drop_path_prob(self, p): + for module in self.modules(): + if isinstance(module, ops.DropPath): + module.p = p + + def plot_genotype(self, results, logger): + genotypes = parse_results(results, self.n_nodes) + logger.info(genotypes) + return genotypes diff --git a/examples/nas/cdarts/ops.py b/examples/nas/cdarts/ops.py new file mode 100644 index 0000000000..403a2b6b8a --- /dev/null +++ b/examples/nas/cdarts/ops.py @@ -0,0 +1,161 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + +import torch +import torch.nn as nn + +OPS = { + 'none': lambda C, stride, affine: Zero(stride), + 'avg_pool_3x3': lambda C, stride, affine: PoolWithoutBN('avg', C, 3, stride, 1, affine=affine), + 'max_pool_3x3': lambda C, stride, affine: PoolWithoutBN('max', C, 3, stride, 1, affine=affine), + 'skip_connect': lambda C, stride, affine: nn.Identity() if stride == 1 else FactorizedReduce(C, C, affine=affine), + 'sep_conv_3x3': lambda C, stride, affine: SepConv(C, C, 3, stride, 1, affine=affine), + 'sep_conv_5x5': lambda C, stride, affine: SepConv(C, C, 5, stride, 2, affine=affine), + 'sep_conv_7x7': lambda C, stride, affine: SepConv(C, C, 7, stride, 3, affine=affine), + 'dil_conv_3x3': lambda C, stride, affine: DilConv(C, C, 3, stride, 2, 2, affine=affine), # 5x5 + 'dil_conv_5x5': lambda C, stride, affine: DilConv(C, C, 5, stride, 4, 2, affine=affine), # 9x9 + 'conv_7x1_1x7': lambda C, stride, affine: FacConv(C, C, 7, stride, 3, affine=affine) +} + +PRIMITIVES = [ + 'max_pool_3x3', + 'avg_pool_3x3', + 'skip_connect', # identity + 'sep_conv_3x3', + 'sep_conv_5x5', + 'dil_conv_3x3', + 'dil_conv_5x5', +] + + +class DropPath(nn.Module): + def __init__(self, p=0.): + """ + Drop path with probability. + Parameters + ---------- + p : float + Probability of an path to be zeroed. + """ + super().__init__() + self.p = p + + def forward(self, x): + if self.training and self.p > 0.: + keep_prob = 1. - self.p + # per data point mask + mask = torch.zeros((x.size(0), 1, 1, 1), device=x.device).bernoulli_(keep_prob) + return x / keep_prob * mask + + return x + + +class PoolWithoutBN(nn.Module): + """ + AvgPool or MaxPool with BN. `pool_type` must be `max` or `avg`. + """ + + def __init__(self, pool_type, C, kernel_size, stride, padding, affine=True): + super().__init__() + if pool_type.lower() == 'max': + self.pool = nn.MaxPool2d(kernel_size, stride, padding) + elif pool_type.lower() == 'avg': + self.pool = nn.AvgPool2d(kernel_size, stride, padding, count_include_pad=False) + else: + raise ValueError() + + def forward(self, x): + out = self.pool(x) + return out + + +class StdConv(nn.Module): + """ + Standard conv: ReLU - Conv - BN + """ + + def __init__(self, C_in, C_out, kernel_size, stride, padding, affine=True): + super().__init__() + self.net = nn.Sequential( + nn.ReLU(), + nn.Conv2d(C_in, C_out, kernel_size, stride, padding, bias=False), + nn.BatchNorm2d(C_out, affine=affine) + ) + + def forward(self, x): + return self.net(x) + + +class FacConv(nn.Module): + """ + Factorized conv: ReLU - Conv(Kx1) - Conv(1xK) - BN + """ + + def __init__(self, C_in, C_out, kernel_length, stride, padding, affine=True): + super().__init__() + self.net = nn.Sequential( + nn.ReLU(), + nn.Conv2d(C_in, C_in, (kernel_length, 1), stride, padding, bias=False), + nn.Conv2d(C_in, C_out, (1, kernel_length), stride, padding, bias=False), + nn.BatchNorm2d(C_out, affine=affine) + ) + + def forward(self, x): + return self.net(x) + + +class DilConv(nn.Module): + """ + (Dilated) depthwise separable conv. + ReLU - (Dilated) depthwise separable - Pointwise - BN. + If dilation == 2, 3x3 conv => 5x5 receptive field, 5x5 conv => 9x9 receptive field. + """ + + def __init__(self, C_in, C_out, kernel_size, stride, padding, dilation, affine=True): + super().__init__() + self.net = nn.Sequential( + nn.ReLU(), + nn.Conv2d(C_in, C_in, kernel_size, stride, padding, dilation=dilation, groups=C_in, + bias=False), + nn.Conv2d(C_in, C_out, 1, stride=1, padding=0, bias=False), + nn.BatchNorm2d(C_out, affine=affine) + ) + + def forward(self, x): + return self.net(x) + + +class SepConv(nn.Module): + """ + Depthwise separable conv. + DilConv(dilation=1) * 2. + """ + + def __init__(self, C_in, C_out, kernel_size, stride, padding, affine=True): + super().__init__() + self.net = nn.Sequential( + DilConv(C_in, C_in, kernel_size, stride, padding, dilation=1, affine=affine), + DilConv(C_in, C_out, kernel_size, 1, padding, dilation=1, affine=affine) + ) + + def forward(self, x): + return self.net(x) + + +class FactorizedReduce(nn.Module): + """ + Reduce feature map size by factorized pointwise (stride=2). + """ + + def __init__(self, C_in, C_out, affine=True): + super().__init__() + self.relu = nn.ReLU() + self.conv1 = nn.Conv2d(C_in, C_out // 2, 1, stride=2, padding=0, bias=False) + self.conv2 = nn.Conv2d(C_in, C_out // 2, 1, stride=2, padding=0, bias=False) + self.bn = nn.BatchNorm2d(C_out, affine=affine) + + def forward(self, x): + x = self.relu(x) + out = torch.cat([self.conv1(x), self.conv2(x[:, :, 1:, 1:])], dim=1) + out = self.bn(out) + return out diff --git a/examples/nas/cdarts/retrain.py b/examples/nas/cdarts/retrain.py new file mode 100644 index 0000000000..6332342f88 --- /dev/null +++ b/examples/nas/cdarts/retrain.py @@ -0,0 +1,153 @@ +import json +import logging +import os +import time +from argparse import ArgumentParser + +import torch +import torch.nn as nn + +import apex +import datasets +import utils +from apex.parallel import DistributedDataParallel +from config import RetrainConfig +from datasets.cifar import get_augment_datasets +from model import Model +from nni.nas.pytorch.fixed import apply_fixed_architecture +from nni.nas.pytorch.utils import AverageMeterGroup + + +def train(logger, config, train_loader, model, optimizer, criterion, epoch, main_proc): + meters = AverageMeterGroup() + cur_lr = optimizer.param_groups[0]["lr"] + if main_proc: + logger.info("Epoch %d LR %.6f", epoch, cur_lr) + + model.train() + for step, (x, y) in enumerate(train_loader): + x, y = x.cuda(non_blocking=True), y.cuda(non_blocking=True) + optimizer.zero_grad() + logits, aux_logits = model(x) + loss = criterion(logits, y) + if config.aux_weight > 0.: + loss += config.aux_weight * criterion(aux_logits, y) + loss.backward() + nn.utils.clip_grad_norm_(model.parameters(), config.grad_clip) + optimizer.step() + + prec1, prec5 = utils.accuracy(logits, y, topk=(1, 5)) + metrics = {"prec1": prec1, "prec5": prec5, "loss": loss} + metrics = utils.reduce_metrics(metrics, config.distributed) + meters.update(metrics) + + if main_proc and (step % config.log_frequency == 0 or step + 1 == len(train_loader)): + logger.info("Epoch [%d/%d] Step [%d/%d] %s", epoch + 1, config.epochs, step + 1, len(train_loader), meters) + + if main_proc: + logger.info("Train: [%d/%d] Final Prec@1 %.4f Prec@5 %.4f", epoch + 1, config.epochs, meters.prec1.avg, meters.prec5.avg) + + +def validate(logger, config, valid_loader, model, criterion, epoch, main_proc): + meters = AverageMeterGroup() + model.eval() + + with torch.no_grad(): + for step, (x, y) in enumerate(valid_loader): + x, y = x.cuda(non_blocking=True), y.cuda(non_blocking=True) + logits, _ = model(x) + loss = criterion(logits, y) + prec1, prec5 = utils.accuracy(logits, y, topk=(1, 5)) + metrics = {"prec1": prec1, "prec5": prec5, "loss": loss} + metrics = utils.reduce_metrics(metrics, config.distributed) + meters.update(metrics) + + if main_proc and (step % config.log_frequency == 0 or step + 1 == len(valid_loader)): + logger.info("Epoch [%d/%d] Step [%d/%d] %s", epoch + 1, config.epochs, step + 1, len(valid_loader), meters) + + if main_proc: + logger.info("Train: [%d/%d] Final Prec@1 %.4f Prec@5 %.4f", epoch + 1, config.epochs, meters.prec1.avg, meters.prec5.avg) + return meters.prec1.avg, meters.prec5.avg + + +def main(): + config = RetrainConfig() + main_proc = not config.distributed or config.local_rank == 0 + if config.distributed: + torch.cuda.set_device(config.local_rank) + torch.distributed.init_process_group(backend='nccl', init_method=config.dist_url, + rank=config.local_rank, world_size=config.world_size) + if main_proc: + os.makedirs(config.output_path, exist_ok=True) + if config.distributed: + torch.distributed.barrier() + logger = utils.get_logger(os.path.join(config.output_path, 'search.log')) + if main_proc: + config.print_params(logger.info) + utils.reset_seed(config.seed) + + loaders, samplers = get_augment_datasets(config) + train_loader, valid_loader = loaders + train_sampler, valid_sampler = samplers + + model = Model(config.dataset, config.layers, in_channels=config.input_channels, channels=config.init_channels, retrain=True).cuda() + if config.label_smooth > 0: + criterion = utils.CrossEntropyLabelSmooth(config.n_classes, config.label_smooth) + else: + criterion = nn.CrossEntropyLoss() + + fixed_arc_path = os.path.join(config.output_path, config.arc_checkpoint) + with open(fixed_arc_path, "r") as f: + fixed_arc = json.load(f) + fixed_arc = utils.encode_tensor(fixed_arc, torch.device("cuda")) + genotypes = utils.parse_results(fixed_arc, n_nodes=4) + genotypes_dict = {i: genotypes for i in range(3)} + apply_fixed_architecture(model, fixed_arc_path) + param_size = utils.param_size(model, criterion, [3, 32, 32] if 'cifar' in config.dataset else [3, 224, 224]) + + if main_proc: + logger.info("Param size: %.6f", param_size) + logger.info("Genotype: %s", genotypes) + + # change training hyper parameters according to cell type + if 'cifar' in config.dataset: + if param_size < 3.0: + config.weight_decay = 3e-4 + config.drop_path_prob = 0.2 + elif 3.0 < param_size < 3.5: + config.weight_decay = 3e-4 + config.drop_path_prob = 0.3 + else: + config.weight_decay = 5e-4 + config.drop_path_prob = 0.3 + + if config.distributed: + apex.parallel.convert_syncbn_model(model) + model = DistributedDataParallel(model, delay_allreduce=True) + + optimizer = torch.optim.SGD(model.parameters(), config.lr, momentum=config.momentum, weight_decay=config.weight_decay) + lr_scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, config.epochs, eta_min=1E-6) + + best_top1 = best_top5 = 0. + for epoch in range(config.epochs): + drop_prob = config.drop_path_prob * epoch / config.epochs + if config.distributed: + model.module.drop_path_prob(drop_prob) + else: + model.drop_path_prob(drop_prob) + # training + if config.distributed: + train_sampler.set_epoch(epoch) + train(logger, config, train_loader, model, optimizer, criterion, epoch, main_proc) + + # validation + top1, top5 = validate(logger, config, valid_loader, model, criterion, epoch, main_proc) + best_top1 = max(best_top1, top1) + best_top5 = max(best_top5, top5) + lr_scheduler.step() + + logger.info("Final best Prec@1 = %.4f Prec@5 = %.4f", best_top1, best_top5) + + +if __name__ == "__main__": + main() diff --git a/examples/nas/cdarts/run_retrain_cifar.sh b/examples/nas/cdarts/run_retrain_cifar.sh new file mode 100644 index 0000000000..c78fd78343 --- /dev/null +++ b/examples/nas/cdarts/run_retrain_cifar.sh @@ -0,0 +1,13 @@ +NGPUS=4 +SGPU=0 +EGPU=$[NGPUS+SGPU-1] +GPU_ID=`seq -s , $SGPU $EGPU` +CUDA_VISIBLE_DEVICES=$GPU_ID python -m torch.distributed.launch --nproc_per_node=$NGPUS retrain.py \ + --dataset cifar10 --n_classes 10 --init_channels 36 --stem_multiplier 3 \ + --arc_checkpoint 'epoch_31.json' \ + --batch_size 128 --workers 1 --log_frequency 10 \ + --world_size $NGPUS --weight_decay 5e-4 \ + --distributed --dist_url 'tcp://127.0.0.1:26443' \ + --lr 0.1 --warmup_epochs 0 --epochs 600 \ + --cutout_length 16 --aux_weight 0.4 --drop_path_prob 0.3 \ + --label_smooth 0.0 --mixup_alpha 0 diff --git a/examples/nas/cdarts/run_search_cifar.sh b/examples/nas/cdarts/run_search_cifar.sh new file mode 100644 index 0000000000..30c9d9b669 --- /dev/null +++ b/examples/nas/cdarts/run_search_cifar.sh @@ -0,0 +1,14 @@ +NGPUS=4 +SGPU=0 +EGPU=$[NGPUS+SGPU-1] +GPU_ID=`seq -s , $SGPU $EGPU` +CUDA_VISIBLE_DEVICES=$GPU_ID python -m torch.distributed.launch --nproc_per_node=$NGPUS search.py \ + --dataset cifar10 --n_classes 10 --init_channels 16 --stem_multiplier 3 \ + --batch_size 64 --workers 1 --log_frequency 10 \ + --distributed --world_size $NGPUS --dist_url 'tcp://127.0.0.1:23343' \ + --regular_ratio 0.2 --regular_coeff 5 \ + --loss_alpha 1 --loss_T 2 \ + --w_lr 0.1 --alpha_lr 3e-4 --nasnet_lr 0.1 \ + --w_weight_decay 3e-4 --alpha_weight_decay 1e-4 \ + --share_module --interactive_type kl \ + --warmup_epochs 2 --epochs 32 diff --git a/examples/nas/cdarts/search.py b/examples/nas/cdarts/search.py new file mode 100644 index 0000000000..1d556831d4 --- /dev/null +++ b/examples/nas/cdarts/search.py @@ -0,0 +1,44 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + +import logging +import os +import random +import time + +import numpy as np +import torch +import torch.nn as nn + +import utils +from config import SearchConfig +from datasets.cifar import get_search_datasets +from model import Model +from nni.nas.pytorch.cdarts import CdartsTrainer + +if __name__ == "__main__": + config = SearchConfig() + main_proc = not config.distributed or config.local_rank == 0 + if config.distributed: + torch.cuda.set_device(config.local_rank) + torch.distributed.init_process_group(backend='nccl', init_method=config.dist_url, + rank=config.local_rank, world_size=config.world_size) + if main_proc: + os.makedirs(config.output_path, exist_ok=True) + if config.distributed: + torch.distributed.barrier() + logger = utils.get_logger(os.path.join(config.output_path, 'search.log')) + if main_proc: + config.print_params(logger.info) + utils.reset_seed(config.seed) + + loaders, samplers = get_search_datasets(config) + model_small = Model(config.dataset, 8).cuda() + if config.share_module: + model_large = Model(config.dataset, 20, shared_modules=model_small.shared_modules).cuda() + else: + model_large = Model(config.dataset, 20).cuda() + + criterion = nn.CrossEntropyLoss() + trainer = CdartsTrainer(model_small, model_large, criterion, loaders, samplers, logger, config) + trainer.train() diff --git a/examples/nas/cdarts/trainer.py b/examples/nas/cdarts/trainer.py new file mode 100644 index 0000000000..1e9ce45b80 --- /dev/null +++ b/examples/nas/cdarts/trainer.py @@ -0,0 +1,270 @@ +import json +import logging +import os + +import torch +import torch.nn as nn +import torch.nn.functional as F + +import apex +from apex.parallel import DistributedDataParallel +from nni.nas.pytorch.darts import DartsMutator +from nni.nas.pytorch.mutables import LayerChoice +from nni.nas.pytorch.mutator import Mutator +from nni.nas.pytorch.utils import AverageMeterGroup +from utils import CyclicIterator, TorchTensorEncoder, accuracy, reduce_metrics + +PHASE_SMALL = "small" +PHASE_LARGE = "large" + + +class RegularizedDartsMutator(DartsMutator): + def reset(self): + raise ValueError("You should probably call `reset_with_loss`.") + + def cut_choices(self, cut_num=2): + # `cut_choices` is implemented but not used + for mutable in self.mutables: + if isinstance(mutable, LayerChoice): + _, idx = torch.topk(-self.choices[mutable.key], cut_num) + with torch.no_grad(): + for i in idx: + self.choices[mutable.key][i] = -float("inf") + + def reset_with_loss(self): + self._cache, reg_loss = self.sample_search() + return reg_loss + + def sample_search(self): + result = super().sample_search() + loss = [] + for mutable in self.mutables: + if isinstance(mutable, LayerChoice): + def need_reg(choice): + return any(t in str(type(choice)).lower() for t in ["poolwithoutbn", "identity", "dilconv"]) + + for i, choice in enumerate(mutable.choices): + if need_reg(choice): + norm = torch.abs(self.choices[mutable.key][i]) + if norm < 1E10: + loss.append(norm) + if not loss: + return result, None + return result, sum(loss) + + def export(self, logger): + result = self.sample_final() + if hasattr(self.model, "plot_genotype"): + genotypes = self.model.plot_genotype(result, logger) + return result, genotypes + + +class RegularizedMutatorParallel(DistributedDataParallel): + def reset_with_loss(self): + result = self.module.reset_with_loss() + self.callback_queued = False + return result + + def cut_choices(self, *args, **kwargs): + self.module.cut_choices(*args, **kwargs) + + def export(self, logger): + return self.module.export(logger) + + +class DartsDiscreteMutator(Mutator): + + def __init__(self, model, parent_mutator): + super().__init__(model) + self.__dict__["parent_mutator"] = parent_mutator # avoid parameters to be included + + def sample_search(self): + return self.parent_mutator.sample_final() + + +class InteractiveKLLoss(nn.Module): + def __init__(self, temperature): + super().__init__() + self.temperature = temperature + # self.kl_loss = nn.KLDivLoss(reduction = 'batchmean') + self.kl_loss = nn.KLDivLoss() + + def forward(self, student, teacher): + return self.kl_loss(F.log_softmax(student / self.temperature, dim=1), + F.softmax(teacher / self.temperature, dim=1)) + + +class CdartsTrainer(object): + def __init__(self, model_small, model_large, criterion, loaders, samplers, logger, config): + train_loader, valid_loader = loaders + train_sampler, valid_sampler = samplers + self.train_loader = CyclicIterator(train_loader, train_sampler, config.distributed) + self.valid_loader = CyclicIterator(valid_loader, valid_sampler, config.distributed) + + self.regular_coeff = config.regular_coeff + self.regular_ratio = config.regular_ratio + self.warmup_epochs = config.warmup_epochs + self.fix_head = config.fix_head + self.epochs = config.epochs + self.steps_per_epoch = config.steps_per_epoch + if self.steps_per_epoch is None: + self.steps_per_epoch = min(len(self.train_loader), len(self.valid_loader)) + self.loss_alpha = config.loss_alpha + self.grad_clip = config.grad_clip + if config.interactive_type == "kl": + self.interactive_loss = InteractiveKLLoss(config.loss_T) + elif config.interactive_type == "smoothl1": + self.interactive_loss = nn.SmoothL1Loss() + self.loss_T = config.loss_T + self.distributed = config.distributed + self.log_frequency = config.log_frequency + self.main_proc = not config.distributed or config.local_rank == 0 + + self.logger = logger + self.checkpoint_dir = config.output_path + if self.main_proc: + os.makedirs(self.checkpoint_dir, exist_ok=True) + if config.distributed: + torch.distributed.barrier() + + self.model_small = model_small + self.model_large = model_large + if self.fix_head: + for param in self.model_small.aux_head.parameters(): + param.requires_grad = False + for param in self.model_large.aux_head.parameters(): + param.requires_grad = False + + self.mutator_small = RegularizedDartsMutator(self.model_small).cuda() + self.mutator_large = DartsDiscreteMutator(self.model_large, self.mutator_small).cuda() + self.criterion = criterion + + self.optimizer_small = torch.optim.SGD(self.model_small.parameters(), config.w_lr, + momentum=config.w_momentum, weight_decay=config.w_weight_decay) + self.optimizer_large = torch.optim.SGD(self.model_large.parameters(), config.nasnet_lr, + momentum=config.w_momentum, weight_decay=config.w_weight_decay) + self.optimizer_alpha = torch.optim.Adam(self.mutator_small.parameters(), config.alpha_lr, + betas=(0.5, 0.999), weight_decay=config.alpha_weight_decay) + + if config.distributed: + apex.parallel.convert_syncbn_model(self.model_small) + apex.parallel.convert_syncbn_model(self.model_large) + self.model_small = DistributedDataParallel(self.model_small, delay_allreduce=True) + self.model_large = DistributedDataParallel(self.model_large, delay_allreduce=True) + self.mutator_small = RegularizedMutatorParallel(self.mutator_small, delay_allreduce=True) + if config.share_module: + self.model_small.callback_queued = True + self.model_large.callback_queued = True + # mutator large never gets optimized, so do not need parallelized + + def warmup(self, phase, epoch): + assert phase in [PHASE_SMALL, PHASE_LARGE] + if phase == PHASE_SMALL: + model, optimizer = self.model_small, self.optimizer_small + elif phase == PHASE_LARGE: + model, optimizer = self.model_large, self.optimizer_large + model.train() + meters = AverageMeterGroup() + for step in range(self.steps_per_epoch): + x, y = next(self.train_loader) + x, y = x.cuda(), y.cuda() + + optimizer.zero_grad() + logits_main, _ = model(x) + loss = self.criterion(logits_main, y) + loss.backward() + + self._clip_grad_norm(model) + optimizer.step() + prec1, prec5 = accuracy(logits_main, y, topk=(1, 5)) + metrics = {"prec1": prec1, "prec5": prec5, "loss": loss} + metrics = reduce_metrics(metrics, self.distributed) + meters.update(metrics) + if self.main_proc and (step % self.log_frequency == 0 or step + 1 == self.steps_per_epoch): + self.logger.info("Epoch [%d/%d] Step [%d/%d] (%s) %s", epoch + 1, self.epochs, + step + 1, self.steps_per_epoch, phase, meters) + + def _clip_grad_norm(self, model): + if isinstance(model, DistributedDataParallel): + nn.utils.clip_grad_norm_(model.module.parameters(), self.grad_clip) + else: + nn.utils.clip_grad_norm_(model.parameters(), self.grad_clip) + + def _reset_nan(self, parameters): + with torch.no_grad(): + for param in parameters: + for i, p in enumerate(param): + if p != p: # equivalent to `isnan(p)` + param[i] = float("-inf") + + def joint_train(self, epoch): + self.model_large.train() + self.model_small.train() + meters = AverageMeterGroup() + for step in range(self.steps_per_epoch): + trn_x, trn_y = next(self.train_loader) + val_x, val_y = next(self.valid_loader) + trn_x, trn_y = trn_x.cuda(), trn_y.cuda() + val_x, val_y = val_x.cuda(), val_y.cuda() + + # step 1. optimize architecture + self.optimizer_alpha.zero_grad() + self.optimizer_large.zero_grad() + reg_decay = max(self.regular_coeff * (1 - float(epoch - self.warmup_epochs) / ( + (self.epochs - self.warmup_epochs) * self.regular_ratio)), 0) + loss_regular = self.mutator_small.reset_with_loss() + if loss_regular: + loss_regular *= reg_decay + logits_search, emsemble_logits_search = self.model_small(val_x) + logits_main, emsemble_logits_main = self.model_large(val_x) + loss_cls = (self.criterion(logits_search, val_y) + self.criterion(logits_main, val_y)) / self.loss_alpha + loss_interactive = self.interactive_loss(emsemble_logits_search, emsemble_logits_main) * (self.loss_T ** 2) * self.loss_alpha + loss = loss_cls + loss_interactive + loss_regular + loss.backward() + self._clip_grad_norm(self.model_large) + self.optimizer_large.step() + self.optimizer_alpha.step() + # NOTE: need to call here `self._reset_nan(self.mutator_small.parameters())` if `cut_choices` + + # step 2. optimize op weights + self.optimizer_small.zero_grad() + with torch.no_grad(): + # resample architecture since parameters have been changed + self.mutator_small.reset_with_loss() + logits_search_train, _ = self.model_small(trn_x) + loss_weight = self.criterion(logits_search_train, trn_y) + loss_weight.backward() + self._clip_grad_norm(self.model_small) + self.optimizer_small.step() + + metrics = {"loss_cls": loss_cls, "loss_interactive": loss_interactive, + "loss_regular": loss_regular, "loss_weight": loss_weight} + metrics = reduce_metrics(metrics, self.distributed) + meters.update(metrics) + + if self.main_proc and (step % self.log_frequency == 0 or step + 1 == self.steps_per_epoch): + self.logger.info("Epoch [%d/%d] Step [%d/%d] (joint) %s", epoch + 1, self.epochs, + step + 1, self.steps_per_epoch, meters) + + def train(self): + for epoch in range(self.epochs): + if epoch < self.warmup_epochs: + with torch.no_grad(): # otherwise grads will be retained on the architecture params + self.mutator_small.reset_with_loss() + self.warmup(PHASE_SMALL, epoch) + else: + with torch.no_grad(): + self.mutator_large.reset() + self.warmup(PHASE_LARGE, epoch) + self.joint_train(epoch) + + self.export(os.path.join(self.checkpoint_dir, "epoch_{:02d}.json".format(epoch)), + os.path.join(self.checkpoint_dir, "epoch_{:02d}.genotypes".format(epoch))) + + def export(self, file, genotype_file): + if self.main_proc: + mutator_export, genotypes = self.mutator_small.export(self.logger) + with open(file, "w") as f: + json.dump(mutator_export, f, indent=2, sort_keys=True, cls=TorchTensorEncoder) + with open(genotype_file, "w") as f: + f.write(str(genotypes)) diff --git a/examples/nas/cdarts/utils.py b/examples/nas/cdarts/utils.py new file mode 100644 index 0000000000..d0b9d48a80 --- /dev/null +++ b/examples/nas/cdarts/utils.py @@ -0,0 +1,177 @@ +import json +import logging +import os +import random +from collections import namedtuple + +import numpy as np +import torch +import torch.distributed as dist +import torch.nn as nn + +from genotypes import Genotype +from ops import PRIMITIVES + + +def get_logger(file_path): + """ Make python logger """ + logger = logging.getLogger('cdarts') + log_format = '%(asctime)s | %(message)s' + formatter = logging.Formatter(log_format, datefmt='%m/%d %I:%M:%S %p') + file_handler = logging.FileHandler(file_path) + file_handler.setFormatter(formatter) + # stream_handler = logging.StreamHandler() + # stream_handler.setFormatter(formatter) + + logger.addHandler(file_handler) + # logger.addHandler(stream_handler) + logger.setLevel(logging.INFO) + + return logger + + +class CyclicIterator: + def __init__(self, loader, sampler, distributed): + self.loader = loader + self.sampler = sampler + self.epoch = 0 + self.distributed = distributed + self._next_epoch() + + def _next_epoch(self): + if self.distributed: + self.sampler.set_epoch(self.epoch) + self.iterator = iter(self.loader) + self.epoch += 1 + + def __len__(self): + return len(self.loader) + + def __iter__(self): + return self + + def __next__(self): + try: + return next(self.iterator) + except StopIteration: + self._next_epoch() + return next(self.iterator) + + +class CrossEntropyLabelSmooth(nn.Module): + + def __init__(self, num_classes, epsilon): + super(CrossEntropyLabelSmooth, self).__init__() + self.num_classes = num_classes + self.epsilon = epsilon + self.logsoftmax = nn.LogSoftmax(dim=1) + + def forward(self, inputs, targets): + log_probs = self.logsoftmax(inputs) + targets = torch.zeros_like(log_probs).scatter_(1, targets.unsqueeze(1), 1) + targets = (1 - self.epsilon) * targets + self.epsilon / self.num_classes + loss = (-targets * log_probs).mean(0).sum() + return loss + + +class TorchTensorEncoder(json.JSONEncoder): + def default(self, o): # pylint: disable=method-hidden + if isinstance(o, torch.Tensor): + olist = o.tolist() + if "bool" not in o.type().lower() and all(map(lambda d: d == 0 or d == 1, olist)): + _logger.warning("Every element in %s is either 0 or 1. " + "You might consider convert it into bool.", olist) + return olist + return super().default(o) + + +def accuracy(output, target, topk=(1,)): + """ Computes the precision@k for the specified values of k """ + maxk = max(topk) + batch_size = target.size(0) + + _, pred = output.topk(maxk, 1, True, True) + pred = pred.t() + # one-hot case + if target.ndimension() > 1: + target = target.max(1)[1] + + correct = pred.eq(target.view(1, -1).expand_as(pred)) + + res = [] + for k in topk: + correct_k = correct[:k].view(-1).float().sum(0) + res.append(correct_k.mul_(1.0 / batch_size)) + return res + + +def reduce_tensor(tensor): + rt = tensor.clone() + dist.all_reduce(rt, op=dist.ReduceOp.SUM) + rt /= float(os.environ["WORLD_SIZE"]) + return rt + + +def reduce_metrics(metrics, distributed=False): + if distributed: + return {k: reduce_tensor(v).item() for k, v in metrics.items()} + return {k: v.item() for k, v in metrics.items()} + + +def parse_results(results, n_nodes): + concat = range(2, 2 + n_nodes) + normal_gene = [] + reduction_gene = [] + for i in range(n_nodes): + normal_node = [] + reduction_node = [] + for j in range(2 + i): + normal_key = 'normal_n{}_p{}'.format(i + 2, j) + reduction_key = 'reduce_n{}_p{}'.format(i + 2, j) + normal_op = results[normal_key].cpu().numpy() + reduction_op = results[reduction_key].cpu().numpy() + if sum(normal_op == 1): + normal_index = np.argmax(normal_op) + normal_node.append((PRIMITIVES[normal_index], j)) + if sum(reduction_op == 1): + reduction_index = np.argmax(reduction_op) + reduction_node.append((PRIMITIVES[reduction_index], j)) + normal_gene.append(normal_node) + reduction_gene.append(reduction_node) + + genotypes = Genotype(normal=normal_gene, normal_concat=concat, + reduce=reduction_gene, reduce_concat=concat) + return genotypes + + +def param_size(model, loss_fn, input_size): + """ + Compute parameter size in MB + """ + x = torch.rand([2] + input_size).cuda() + y, _ = model(x) + target = torch.randint(model.n_classes, size=[2]).cuda() + loss = loss_fn(y, target) + loss.backward() + n_params = sum(np.prod(v.size()) for k, v in model.named_parameters() if not k.startswith('aux_head') and v.grad is not None) + return n_params / 1e6 + + +def encode_tensor(data, device): + if isinstance(data, list): + if all(map(lambda o: isinstance(o, bool), data)): + return torch.tensor(data, dtype=torch.bool, device=device) # pylint: disable=not-callable + else: + return torch.tensor(data, dtype=torch.float, device=device) # pylint: disable=not-callable + if isinstance(data, dict): + return {k: encode_tensor(v, device) for k, v in data.items()} + return data + + +def reset_seed(seed): + torch.manual_seed(seed) + torch.cuda.manual_seed_all(seed) + np.random.seed(seed) + random.seed(seed) + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.benchmark = True diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/__init__.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/__init__.py new file mode 100644 index 0000000000..2d00927846 --- /dev/null +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/__init__.py @@ -0,0 +1,5 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + +from .mutator import RegularizedDartsMutator, RegularizedMutatorParallel, DartsDiscreteMutator +from .trainer import CdartsTrainer \ No newline at end of file diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py new file mode 100644 index 0000000000..d7aaa049a6 --- /dev/null +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py @@ -0,0 +1,75 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + +import logging + +import torch +import torch.nn as nn +import torch.nn.functional as F + +from nni.nas.pytorch.darts import DartsMutator +from nni.nas.pytorch.mutables import LayerChoice +from nni.nas.pytorch.mutator import Mutator + +class RegularizedDartsMutator(DartsMutator): + def reset(self): + raise ValueError("You should probably call `reset_with_loss`.") + + def cut_choices(self, cut_num=2): + # `cut_choices` is implemented but not used + for mutable in self.mutables: + if isinstance(mutable, LayerChoice): + _, idx = torch.topk(-self.choices[mutable.key], cut_num) + with torch.no_grad(): + for i in idx: + self.choices[mutable.key][i] = -float("inf") + + def reset_with_loss(self): + self._cache, reg_loss = self.sample_search() + return reg_loss + + def sample_search(self): + result = super().sample_search() + loss = [] + for mutable in self.mutables: + if isinstance(mutable, LayerChoice): + def need_reg(choice): + return any(t in str(type(choice)).lower() for t in ["poolwithoutbn", "identity", "dilconv"]) + + for i, choice in enumerate(mutable.choices): + if need_reg(choice): + norm = torch.abs(self.choices[mutable.key][i]) + if norm < 1E10: + loss.append(norm) + if not loss: + return result, None + return result, sum(loss) + + def export(self, logger): + result = self.sample_final() + if hasattr(self.model, "plot_genotype"): + genotypes = self.model.plot_genotype(result, logger) + return result, genotypes + + +class RegularizedMutatorParallel(DistributedDataParallel): + def reset_with_loss(self): + result = self.module.reset_with_loss() + self.callback_queued = False + return result + + def cut_choices(self, *args, **kwargs): + self.module.cut_choices(*args, **kwargs) + + def export(self, logger): + return self.module.export(logger) + + +class DartsDiscreteMutator(Mutator): + + def __init__(self, model, parent_mutator): + super().__init__(model) + self.__dict__["parent_mutator"] = parent_mutator # avoid parameters to be included + + def sample_search(self): + return self.parent_mutator.sample_final() \ No newline at end of file diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py new file mode 100644 index 0000000000..07fdd47649 --- /dev/null +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py @@ -0,0 +1,203 @@ +import json +import logging +import os + +import torch +import torch.nn as nn +import torch.nn.functional as F + +import apex +from apex.parallel import DistributedDataParallel +from nni.nas.pytorch.cdarts import RegularizedDartsMutator, RegularizedMutatorParallel, DartsDiscreteMutator +from nni.nas.pytorch.utils import AverageMeterGroup +from utils import CyclicIterator, TorchTensorEncoder, accuracy, reduce_metrics + +PHASE_SMALL = "small" +PHASE_LARGE = "large" + +class InteractiveKLLoss(nn.Module): + def __init__(self, temperature): + super().__init__() + self.temperature = temperature + # self.kl_loss = nn.KLDivLoss(reduction = 'batchmean') + self.kl_loss = nn.KLDivLoss() + + def forward(self, student, teacher): + return self.kl_loss(F.log_softmax(student / self.temperature, dim=1), + F.softmax(teacher / self.temperature, dim=1)) + + +class CdartsTrainer(object): + def __init__(self, model_small, model_large, criterion, loaders, samplers, logger, config): + train_loader, valid_loader = loaders + train_sampler, valid_sampler = samplers + self.train_loader = CyclicIterator(train_loader, train_sampler, config.distributed) + self.valid_loader = CyclicIterator(valid_loader, valid_sampler, config.distributed) + + self.regular_coeff = config.regular_coeff + self.regular_ratio = config.regular_ratio + self.warmup_epochs = config.warmup_epochs + self.fix_head = config.fix_head + self.epochs = config.epochs + self.steps_per_epoch = config.steps_per_epoch + if self.steps_per_epoch is None: + self.steps_per_epoch = min(len(self.train_loader), len(self.valid_loader)) + self.loss_alpha = config.loss_alpha + self.grad_clip = config.grad_clip + if config.interactive_type == "kl": + self.interactive_loss = InteractiveKLLoss(config.loss_T) + elif config.interactive_type == "smoothl1": + self.interactive_loss = nn.SmoothL1Loss() + self.loss_T = config.loss_T + self.distributed = config.distributed + self.log_frequency = config.log_frequency + self.main_proc = not config.distributed or config.local_rank == 0 + + self.logger = logger + self.checkpoint_dir = config.output_path + if self.main_proc: + os.makedirs(self.checkpoint_dir, exist_ok=True) + if config.distributed: + torch.distributed.barrier() + + self.model_small = model_small + self.model_large = model_large + if self.fix_head: + for param in self.model_small.aux_head.parameters(): + param.requires_grad = False + for param in self.model_large.aux_head.parameters(): + param.requires_grad = False + + self.mutator_small = RegularizedDartsMutator(self.model_small).cuda() + self.mutator_large = DartsDiscreteMutator(self.model_large, self.mutator_small).cuda() + self.criterion = criterion + + self.optimizer_small = torch.optim.SGD(self.model_small.parameters(), config.w_lr, + momentum=config.w_momentum, weight_decay=config.w_weight_decay) + self.optimizer_large = torch.optim.SGD(self.model_large.parameters(), config.nasnet_lr, + momentum=config.w_momentum, weight_decay=config.w_weight_decay) + self.optimizer_alpha = torch.optim.Adam(self.mutator_small.parameters(), config.alpha_lr, + betas=(0.5, 0.999), weight_decay=config.alpha_weight_decay) + + if config.distributed: + apex.parallel.convert_syncbn_model(self.model_small) + apex.parallel.convert_syncbn_model(self.model_large) + self.model_small = DistributedDataParallel(self.model_small, delay_allreduce=True) + self.model_large = DistributedDataParallel(self.model_large, delay_allreduce=True) + self.mutator_small = RegularizedMutatorParallel(self.mutator_small, delay_allreduce=True) + if config.share_module: + self.model_small.callback_queued = True + self.model_large.callback_queued = True + # mutator large never gets optimized, so do not need parallelized + + def warmup(self, phase, epoch): + assert phase in [PHASE_SMALL, PHASE_LARGE] + if phase == PHASE_SMALL: + model, optimizer = self.model_small, self.optimizer_small + elif phase == PHASE_LARGE: + model, optimizer = self.model_large, self.optimizer_large + model.train() + meters = AverageMeterGroup() + for step in range(self.steps_per_epoch): + x, y = next(self.train_loader) + x, y = x.cuda(), y.cuda() + + optimizer.zero_grad() + logits_main, _ = model(x) + loss = self.criterion(logits_main, y) + loss.backward() + + self._clip_grad_norm(model) + optimizer.step() + prec1, prec5 = accuracy(logits_main, y, topk=(1, 5)) + metrics = {"prec1": prec1, "prec5": prec5, "loss": loss} + metrics = reduce_metrics(metrics, self.distributed) + meters.update(metrics) + if self.main_proc and (step % self.log_frequency == 0 or step + 1 == self.steps_per_epoch): + self.logger.info("Epoch [%d/%d] Step [%d/%d] (%s) %s", epoch + 1, self.epochs, + step + 1, self.steps_per_epoch, phase, meters) + + def _clip_grad_norm(self, model): + if isinstance(model, DistributedDataParallel): + nn.utils.clip_grad_norm_(model.module.parameters(), self.grad_clip) + else: + nn.utils.clip_grad_norm_(model.parameters(), self.grad_clip) + + def _reset_nan(self, parameters): + with torch.no_grad(): + for param in parameters: + for i, p in enumerate(param): + if p != p: # equivalent to `isnan(p)` + param[i] = float("-inf") + + def joint_train(self, epoch): + self.model_large.train() + self.model_small.train() + meters = AverageMeterGroup() + for step in range(self.steps_per_epoch): + trn_x, trn_y = next(self.train_loader) + val_x, val_y = next(self.valid_loader) + trn_x, trn_y = trn_x.cuda(), trn_y.cuda() + val_x, val_y = val_x.cuda(), val_y.cuda() + + # step 1. optimize architecture + self.optimizer_alpha.zero_grad() + self.optimizer_large.zero_grad() + reg_decay = max(self.regular_coeff * (1 - float(epoch - self.warmup_epochs) / ( + (self.epochs - self.warmup_epochs) * self.regular_ratio)), 0) + loss_regular = self.mutator_small.reset_with_loss() + if loss_regular: + loss_regular *= reg_decay + logits_search, emsemble_logits_search = self.model_small(val_x) + logits_main, emsemble_logits_main = self.model_large(val_x) + loss_cls = (self.criterion(logits_search, val_y) + self.criterion(logits_main, val_y)) / self.loss_alpha + loss_interactive = self.interactive_loss(emsemble_logits_search, emsemble_logits_main) * (self.loss_T ** 2) * self.loss_alpha + loss = loss_cls + loss_interactive + loss_regular + loss.backward() + self._clip_grad_norm(self.model_large) + self.optimizer_large.step() + self.optimizer_alpha.step() + # NOTE: need to call here `self._reset_nan(self.mutator_small.parameters())` if `cut_choices` + + # step 2. optimize op weights + self.optimizer_small.zero_grad() + with torch.no_grad(): + # resample architecture since parameters have been changed + self.mutator_small.reset_with_loss() + logits_search_train, _ = self.model_small(trn_x) + loss_weight = self.criterion(logits_search_train, trn_y) + loss_weight.backward() + self._clip_grad_norm(self.model_small) + self.optimizer_small.step() + + metrics = {"loss_cls": loss_cls, "loss_interactive": loss_interactive, + "loss_regular": loss_regular, "loss_weight": loss_weight} + metrics = reduce_metrics(metrics, self.distributed) + meters.update(metrics) + + if self.main_proc and (step % self.log_frequency == 0 or step + 1 == self.steps_per_epoch): + self.logger.info("Epoch [%d/%d] Step [%d/%d] (joint) %s", epoch + 1, self.epochs, + step + 1, self.steps_per_epoch, meters) + + def train(self): + for epoch in range(self.epochs): + if epoch < self.warmup_epochs: + with torch.no_grad(): # otherwise grads will be retained on the architecture params + self.mutator_small.reset_with_loss() + self.warmup(PHASE_SMALL, epoch) + else: + with torch.no_grad(): + self.mutator_large.reset() + self.warmup(PHASE_LARGE, epoch) + self.joint_train(epoch) + + self.export(os.path.join(self.checkpoint_dir, "epoch_{:02d}.json".format(epoch)), + os.path.join(self.checkpoint_dir, "epoch_{:02d}.genotypes".format(epoch))) + + def export(self, file, genotype_file): + if self.main_proc: + mutator_export, genotypes = self.mutator_small.export(self.logger) + with open(file, "w") as f: + json.dump(mutator_export, f, indent=2, sort_keys=True, cls=TorchTensorEncoder) + with open(genotype_file, "w") as f: + f.write(str(genotypes)) From 83a7aa41bc79144e504169b308e8461ed98c8d69 Mon Sep 17 00:00:00 2001 From: "penghouwen@icloud.com" Date: Wed, 15 Jan 2020 11:35:24 +0800 Subject: [PATCH 02/21] revise cdarts2nni after code review --- docs/en_US/NAS/CDARTS.md | 34 +++ docs/en_US/NAS/Overview.md | 112 ++++---- examples/nas/cdarts/README.md | 110 ------- examples/nas/cdarts/images/cell1.png | Bin 28026 -> 0 bytes examples/nas/cdarts/images/cell2.png | Bin 29359 -> 0 bytes examples/nas/cdarts/images/cell3.png | Bin 36654 -> 0 bytes examples/nas/cdarts/images/framework1.png | Bin 121056 -> 0 bytes examples/nas/cdarts/images/framework2.png | Bin 112057 -> 0 bytes examples/nas/cdarts/retrain.py | 4 +- examples/nas/cdarts/run_search_cifar.sh | 4 +- examples/nas/cdarts/search.py | 7 +- examples/nas/cdarts/trainer.py | 270 ------------------ .../pynni/nni/nas/pytorch/cdarts/mutator.py | 5 +- .../pynni/nni/nas/pytorch/cdarts/trainer.py | 198 ++++++++++--- 14 files changed, 269 insertions(+), 475 deletions(-) create mode 100644 docs/en_US/NAS/CDARTS.md delete mode 100644 examples/nas/cdarts/README.md delete mode 100644 examples/nas/cdarts/images/cell1.png delete mode 100644 examples/nas/cdarts/images/cell2.png delete mode 100644 examples/nas/cdarts/images/cell3.png delete mode 100644 examples/nas/cdarts/images/framework1.png delete mode 100644 examples/nas/cdarts/images/framework2.png delete mode 100644 examples/nas/cdarts/trainer.py diff --git a/docs/en_US/NAS/CDARTS.md b/docs/en_US/NAS/CDARTS.md new file mode 100644 index 0000000000..9c88d13b81 --- /dev/null +++ b/docs/en_US/NAS/CDARTS.md @@ -0,0 +1,34 @@ +# CDARTS + +## Introduction +CDARTS builds a cyclic feedback mechanism between the search and evaluation networks. First, the search network generates an initial topology for evaluation, so that the weights of the evaluation network can be optimized. Second, the architecture topology in the search network is further optimized by the label supervision in classification, as well as the regularization from the evaluation network through feature distillation. Repeating the above cycle results in a joint optimization of the search and evaluation networks, and thus enables the evolution of the topology to fit the final evaluation network. + +## Reproduction Results +This is CDARTS based on the NNI platform, which currently supports CIFAR10 search and retrain. ImageNet search and retrain should also be supported, and we provide corresponding interfaces. Our reproduced results on NNI are slightly lower than the paper, but much higher than the original DARTS. Here we show the results of three independent experiments on CIFAR10. +| Runs | Paper | NNI | +| ---- |:-------------:| :-----:| +| 1 | 97.52 | 97.44 | +| 2 | 97.53 | 97.48 | +| 3 | 97.58 | 97.56 | + + +## Examples + +[Example code](https://github.com/microsoft/nni/tree/master/examples/nas/cdarts) + +```bash +# In case NNI code is not cloned. If the code is cloned already, ignore this line and enter code folder. +git clone https://github.com/Microsoft/nni.git + +# install apex for distributed training. +git clone https://github.com/NVIDIA/apex +cd apex +python setup.py install --cpp_ext --cuda_ext + +# search the best architecture +cd examples/nas/cdarts +bash run_search_cifar.sh + +# train the best architecture. +bash run_retrain_cifar.sh +``` diff --git a/docs/en_US/NAS/Overview.md b/docs/en_US/NAS/Overview.md index aaf6e599c3..589ea4972b 100644 --- a/docs/en_US/NAS/Overview.md +++ b/docs/en_US/NAS/Overview.md @@ -1,52 +1,60 @@ -# Neural Architecture Search (NAS) on NNI - -Automatic neural architecture search is taking an increasingly important role on finding better models. Recent research works have proved the feasibility of automatic NAS, and also found some models that could beat manually designed and tuned models. Some of representative works are [NASNet][2], [ENAS][1], [DARTS][3], [Network Morphism][4], and [Evolution][5]. There are new innovations keeping emerging. - -However, it takes great efforts to implement NAS algorithms, and it is hard to reuse code base of existing algorithms in new one. To facilitate NAS innovations (e.g., design and implement new NAS models, compare different NAS models side-by-side), an easy-to-use and flexible programming interface is crucial. - -With this motivation, our ambition is to provide a unified architecture in NNI, to accelerate innovations on NAS, and apply state-of-art algorithms on real world problems faster. - -With [the unified interface](./NasInterface.md), there are two different modes for the architecture search. [One](#supported-one-shot-nas-algorithms) is the so-called one-shot NAS, where a super-net is built based on search space, and using one shot training to generate good-performing child model. [The other](./NasInterface.md#classic-distributed-search) is the traditional searching approach, where each child model in search space runs as an independent trial, the performance result is sent to tuner and the tuner generates new child model. - -* [Supported One-shot NAS Algorithms](#supported-one-shot-nas-algorithms) -* [Classic Distributed NAS with NNI experiment](./NasInterface.md#classic-distributed-search) -* [NNI NAS Programming Interface](./NasInterface.md) - -## Supported One-shot NAS Algorithms - -NNI supports below NAS algorithms now and is adding more. User can reproduce an algorithm or use it on their own dataset. We also encourage users to implement other algorithms with [NNI API](#use-nni-api), to benefit more people. - -|Name|Brief Introduction of Algorithm| -|---|---| -| [ENAS](ENAS.md) | [Efficient Neural Architecture Search via Parameter Sharing](https://arxiv.org/abs/1802.03268). In ENAS, a controller learns to discover neural network architectures by searching for an optimal subgraph within a large computational graph. It uses parameter sharing between child models to achieve fast speed and excellent performance. | -| [DARTS](DARTS.md) | [DARTS: Differentiable Architecture Search](https://arxiv.org/abs/1806.09055) introduces a novel algorithm for differentiable network architecture search on bilevel optimization. | -| [P-DARTS](PDARTS.md) | [Progressive Differentiable Architecture Search: Bridging the Depth Gap between Search and Evaluation](https://arxiv.org/abs/1904.12760) is based on DARTS. It introduces an efficient algorithm which allows the depth of searched architectures to grow gradually during the training procedure. | -| [SPOS](SPOS.md) | [Single Path One-Shot Neural Architecture Search with Uniform Sampling](https://arxiv.org/abs/1904.00420) constructs a simplified supernet trained with an uniform path sampling method, and applies an evolutionary algorithm to efficiently search for the best-performing architectures. | - -One-shot algorithms run **standalone without nnictl**. Only PyTorch version has been implemented. Tensorflow 2.x will be supported in future release. - -Here are some common dependencies to run the examples. PyTorch needs to be above 1.2 to use ``BoolTensor``. - -* NNI 1.2+ -* tensorboard -* PyTorch 1.2+ -* git - -## Use NNI API - -NOTE, we are trying to support various NAS algorithms with unified programming interface, and it's in very experimental stage. It means the current programing interface may be updated in future. - -### Programming interface - -The programming interface of designing and searching a model is often demanded in two scenarios. - -1. When designing a neural network, there may be multiple operation choices on a layer, sub-model, or connection, and it's undetermined which one or combination performs best. So, it needs an easy way to express the candidate layers or sub-models. -2. When applying NAS on a neural network, it needs an unified way to express the search space of architectures, so that it doesn't need to update trial code for different searching algorithms. - -NNI proposed API is [here](https://github.com/microsoft/nni/tree/master/src/sdk/pynni/nni/nas/pytorch). And [here](https://github.com/microsoft/nni/tree/master/examples/nas/naive) is an example of NAS implementation, which bases on NNI proposed interface. - -[1]: https://arxiv.org/abs/1802.03268 -[2]: https://arxiv.org/abs/1707.07012 -[3]: https://arxiv.org/abs/1806.09055 -[4]: https://arxiv.org/abs/1806.10282 -[5]: https://arxiv.org/abs/1703.01041 +# Neural Architecture Search (NAS) on NNI + +Automatic neural architecture search is taking an increasingly important role on finding better models. Recent research works have proved the feasibility of automatic NAS, and also found some models that could beat manually designed and tuned models. Some of representative works are [NASNet][2], [ENAS][1], [DARTS][3], [Network Morphism][4], and [Evolution][5]. There are new innovations keeping emerging. + +However, it takes great efforts to implement NAS algorithms, and it is hard to reuse code base of existing algorithms in new one. To facilitate NAS innovations (e.g., design and implement new NAS models, compare different NAS models side-by-side), an easy-to-use and flexible programming interface is crucial. + +With this motivation, our ambition is to provide a unified architecture in NNI, to accelerate innovations on NAS, and apply state-of-art algorithms on real world problems faster. + +With [the unified interface](./NasInterface.md), there are two different modes for the architecture search. [One](#supported-one-shot-nas-algorithms) is the so-called one-shot NAS, where a super-net is built based on search space, and using one shot training to generate good-performing child model. [The other](./NasInterface.md#classic-distributed-search) is the traditional searching approach, where each child model in search space runs as an independent trial, the performance result is sent to tuner and the tuner generates new child model. + +* [Supported One-shot NAS Algorithms](#supported-one-shot-nas-algorithms) +* [Classic Distributed NAS with NNI experiment](./NasInterface.md#classic-distributed-search) +* [NNI NAS Programming Interface](./NasInterface.md) + +## Supported One-shot NAS Algorithms + +NNI supports below NAS algorithms now and is adding more. User can reproduce an algorithm or use it on their own dataset. We also encourage users to implement other algorithms with [NNI API](#use-nni-api), to benefit more people. + +|Name|Brief Introduction of Algorithm| +|---|---| +| [ENAS](ENAS.md) | [Efficient Neural Architecture Search via Parameter Sharing](https://arxiv.org/abs/1802.03268). In ENAS, a controller learns to discover neural network architectures by searching for an optimal subgraph within a large computational graph. It uses parameter sharing between child models to achieve fast speed and excellent performance. | +| [DARTS](DARTS.md) | [DARTS: Differentiable Architecture Search](https://arxiv.org/abs/1806.09055) introduces a novel algorithm for differentiable network architecture search on bilevel optimization. | +| [P-DARTS](PDARTS.md) | [Progressive Differentiable Architecture Search: Bridging the Depth Gap between Search and Evaluation](https://arxiv.org/abs/1904.12760) is based on DARTS. It introduces an efficient algorithm which allows the depth of searched architectures to grow gradually during the training procedure. | +| [SPOS](SPOS.md) | [Single Path One-Shot Neural Architecture Search with Uniform Sampling](https://arxiv.org/abs/1904.00420) constructs a simplified supernet trained with an uniform path sampling method, and applies an evolutionary algorithm to efficiently search for the best-performing architectures. | +| [CDARTS](PDARTS.md) | [Cyclic Differentiable Architecture Search](https://arxiv.org/abs/****) builds a cyclic feedback mechanism between the search and evaluation networks. It introduces a cyclic differentiable architecture search framework which integrates the two networks into a unified architecture.| + +One-shot algorithms run **standalone without nnictl**. Only PyTorch version has been implemented. Tensorflow 2.x will be supported in future release. + +Here are some common dependencies to run the examples. PyTorch needs to be above 1.2 to use ``BoolTensor``. + +* NNI 1.2+ +* tensorboard +* PyTorch 1.2+ +* git + +## Use NNI API + +NOTE, we are trying to support various NAS algorithms with unified programming interface, and it's in very experimental stage. It means the current programing interface may be updated in future. + +### Programming interface + +The programming interface of designing and searching a model is often demanded in two scenarios. + +1. When designing a neural network, there may be multiple operation choices on a layer, sub-model, or connection, and it's undetermined which one or combination performs best. So, it needs an easy way to express the candidate layers or sub-models. +2. When applying NAS on a neural network, it needs an unified way to express the search space of architectures, so that it doesn't need to update trial code for different searching algorithms. + +NNI proposed API is [here](https://github.com/microsoft/nni/tree/master/src/sdk/pynni/nni/nas/pytorch). And [here](https://github.com/microsoft/nni/tree/master/examples/nas/naive) is an example of NAS implementation, which bases on NNI proposed interface. + +[1]: https://arxiv.org/abs/1802.03268 +[2]: https://arxiv.org/abs/1707.07012 +[3]: https://arxiv.org/abs/1806.09055 +[4]: https://arxiv.org/abs/1806.10282 +[5]: https://arxiv.org/abs/1703.01041 + +## **Reference and Feedback** +* To [report a bug](https://github.com/microsoft/nni/issues/new?template=bug-report.md) for this feature in GitHub; +* To [file a feature or improvement request](https://github.com/microsoft/nni/issues/new?template=enhancement.md) for this feature in GitHub; +* To know more about [Feature Engineering with NNI](https://github.com/microsoft/nni/blob/master/docs/en_US/FeatureEngineering/Overview.md); +* To know more about [Model Compression with NNI](https://github.com/microsoft/nni/blob/master/docs/en_US/Compressor/Overview.md); +* To know more about [Hyperparameter Tuning with NNI](https://github.com/microsoft/nni/blob/master/docs/en_US/Tuner/BuiltinTuner.md); diff --git a/examples/nas/cdarts/README.md b/examples/nas/cdarts/README.md deleted file mode 100644 index f4421ea4b9..0000000000 --- a/examples/nas/cdarts/README.md +++ /dev/null @@ -1,110 +0,0 @@ -# Cyclic Differentiable Architecture Search -This is CDARTS based on the NNI platform, which currently supports CIFAR10 search and retrain. ImageNet search and retrain should also be supported, and we provide corresponding interfaces. Our reproduced results on NNI are slightly lower than the paper, but much higher than the original DARTS. - -
- - -
- -## Results -#### Main CIFAR10 top1 accuracy of DARTS and DARTS reproduced by NNI -| Order | Paper | NNI | -| ---- |:-------------:| :-----:| -| 1 | 97.00 +/-0.14 | 97.22 | -| 2 | 97.24 +/-0.09 | 97.11 | - -#### Main CIFAR10 top1 accuracy of CDARTS and CDARTS reproduced by NNI -| Runs | Paper | NNI | -| ---- |:-------------:| :-----:| -| 1 | 97.52 | 97.43 | -| 2 | 97.53 | 97.46 | -| 3 | 97.58 | 97.47 | - -### The normal cells searched by CDARTS(NNI) on CIFAR10 -
- - -
- -
- - - -
- - -## Environments -Tesla V100, CUDA10.0, linux 16.04, pytorch>=1.2, python3, [apex](https://github.com/NVIDIA/apex) and NNI 1.3 - -## Data Preparation -* [Cifar-10](https://www.cs.toronto.edu/~kriz/cifar.html) -* [Cifar-100](https://www.cs.toronto.edu/~kriz/cifar.html) -* [ImageNet-2012](http://www.image-net.org/) - -Create soft link in main dir. -``` -ln -s $DataLocation data -``` - -## Installation -* First, install python requirements. - ```buildoutcfg - pip install torch==1.2.0 - pip install tensorboard==1.13.0 - pip install tensorboardX==1.6 - pip install nni==1.3.0 - ``` -* Then, you should install apex. - ```buildoutcfg - git clone https://github.com/NVIDIA/apex - cd apex - python setup.py install --cpp_ext --cuda_ext - ``` - -## Search and Retrain -### Search -* Main python file is ${ROOT}/search.py -* Followings are options during training. - ```buildoutcfg - --regular_ratio # if use regular, the ragular ratio - --regular_coeff # if use regular, the regular coefficient - --loss_alpha # the loss coefficient - --loss_T # the loss coefficient - --w_lr # the learning rate of the search network - --alpha_lr # the learning rate of the architecture parameters - --nasnet_lr # the learning rate of the evaluation network - --w_weight_decay # the weight decay the search and the evaluation network - --alpha_weight_decay # the weight decay the the architecture parameters - --fix_head # wheter to fix the paramters of auxiliary heads - --interactive_type # The KD function, kl and smoothl1 - --share_module # Whether to share module of the two networks - --warmup_epochs # the epochs to warmup the search network - --epochs # total epochs of search - - ``` -* Here we present our search scripts on CIFAR10. - ```buildoutcfg - bash run_search_cifar.sh - ``` - - -### Retrain -* Main python file is ${ROOT}/retrain.py -* Followings are options during training. - ```buildoutcfg - --arc_checkpoint # choose which genotype to retrain - --cell_file # path of cell genotype - --weight_decay # decay of W in the Retrain-Phase - --lr # learning rate of W in the Retrain-Phase - --warmup_epochs # warmup epochs - --epochs # total retrain epochs - --cutout_length # cutout length for cifar - --aux_weight # weight of auxiliary loss, 0.4 is the best option - --drop_path_prob # used for dropping path in NAS - --label_smooth # label smooth ratio - --mixup_alpha # ratio of mixup - ``` -* Here we present our train scripts on CIFAR10. - ```buildoutcfg - bash run_retrain_cifar.sh - ``` diff --git a/examples/nas/cdarts/images/cell1.png b/examples/nas/cdarts/images/cell1.png deleted file mode 100644 index 597d3bc42b2bebe56b120384f8d4874424cb3223..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28026 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 K@M@*Uul^6gcHle! diff --git a/examples/nas/cdarts/images/cell3.png b/examples/nas/cdarts/images/cell3.png deleted file mode 100644 index 741bbbea236dcac8b341cdd358f542d08e26dac3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36654 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
Y{0$NWZgUCJ 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�_vk?EOI} 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 hYK`jFaYN+Lv#?*(GG&_L3W1^RXMSTrT4^ZZvPI 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 diff --git a/examples/nas/cdarts/retrain.py b/examples/nas/cdarts/retrain.py index 6332342f88..453c3f8ae9 100644 --- a/examples/nas/cdarts/retrain.py +++ b/examples/nas/cdarts/retrain.py @@ -7,10 +7,10 @@ import torch import torch.nn as nn -import apex import datasets import utils -from apex.parallel import DistributedDataParallel +import apex # pylint: disable=import-error +from apex.parallel import DistributedDataParallel # pylint: disable=import-error from config import RetrainConfig from datasets.cifar import get_augment_datasets from model import Model diff --git a/examples/nas/cdarts/run_search_cifar.sh b/examples/nas/cdarts/run_search_cifar.sh index 30c9d9b669..64c6b04da4 100644 --- a/examples/nas/cdarts/run_search_cifar.sh +++ b/examples/nas/cdarts/run_search_cifar.sh @@ -8,7 +8,7 @@ CUDA_VISIBLE_DEVICES=$GPU_ID python -m torch.distributed.launch --nproc_per_node --distributed --world_size $NGPUS --dist_url 'tcp://127.0.0.1:23343' \ --regular_ratio 0.2 --regular_coeff 5 \ --loss_alpha 1 --loss_T 2 \ - --w_lr 0.1 --alpha_lr 3e-4 --nasnet_lr 0.1 \ - --w_weight_decay 3e-4 --alpha_weight_decay 1e-4 \ + --w_lr 0.2 --alpha_lr 3e-4 --nasnet_lr 0.2 \ + --w_weight_decay 0. --alpha_weight_decay 0. \ --share_module --interactive_type kl \ --warmup_epochs 2 --epochs 32 diff --git a/examples/nas/cdarts/search.py b/examples/nas/cdarts/search.py index 1d556831d4..c41f7ce1ff 100644 --- a/examples/nas/cdarts/search.py +++ b/examples/nas/cdarts/search.py @@ -40,5 +40,10 @@ model_large = Model(config.dataset, 20).cuda() criterion = nn.CrossEntropyLoss() - trainer = CdartsTrainer(model_small, model_large, criterion, loaders, samplers, logger, config) + trainer = CdartsTrainer(model_small, model_large, criterion, loaders, samplers, logger, + config.regular_coeff, config.regular_ratio, config.warmup_epochs, config.fix_head, + config.epochs, config.steps_per_epoch, config.loss_alpha, config.loss_T, config.distributed, + config.log_frequency, config.grad_clip, config.interactive_type, config.output_path, + config.w_lr, config.w_momentum, config.w_weight_decay, config.alpha_lr, config.alpha_weight_decay, + config.nasnet_lr, config.local_rank, config.share_module) trainer.train() diff --git a/examples/nas/cdarts/trainer.py b/examples/nas/cdarts/trainer.py deleted file mode 100644 index 1e9ce45b80..0000000000 --- a/examples/nas/cdarts/trainer.py +++ /dev/null @@ -1,270 +0,0 @@ -import json -import logging -import os - -import torch -import torch.nn as nn -import torch.nn.functional as F - -import apex -from apex.parallel import DistributedDataParallel -from nni.nas.pytorch.darts import DartsMutator -from nni.nas.pytorch.mutables import LayerChoice -from nni.nas.pytorch.mutator import Mutator -from nni.nas.pytorch.utils import AverageMeterGroup -from utils import CyclicIterator, TorchTensorEncoder, accuracy, reduce_metrics - -PHASE_SMALL = "small" -PHASE_LARGE = "large" - - -class RegularizedDartsMutator(DartsMutator): - def reset(self): - raise ValueError("You should probably call `reset_with_loss`.") - - def cut_choices(self, cut_num=2): - # `cut_choices` is implemented but not used - for mutable in self.mutables: - if isinstance(mutable, LayerChoice): - _, idx = torch.topk(-self.choices[mutable.key], cut_num) - with torch.no_grad(): - for i in idx: - self.choices[mutable.key][i] = -float("inf") - - def reset_with_loss(self): - self._cache, reg_loss = self.sample_search() - return reg_loss - - def sample_search(self): - result = super().sample_search() - loss = [] - for mutable in self.mutables: - if isinstance(mutable, LayerChoice): - def need_reg(choice): - return any(t in str(type(choice)).lower() for t in ["poolwithoutbn", "identity", "dilconv"]) - - for i, choice in enumerate(mutable.choices): - if need_reg(choice): - norm = torch.abs(self.choices[mutable.key][i]) - if norm < 1E10: - loss.append(norm) - if not loss: - return result, None - return result, sum(loss) - - def export(self, logger): - result = self.sample_final() - if hasattr(self.model, "plot_genotype"): - genotypes = self.model.plot_genotype(result, logger) - return result, genotypes - - -class RegularizedMutatorParallel(DistributedDataParallel): - def reset_with_loss(self): - result = self.module.reset_with_loss() - self.callback_queued = False - return result - - def cut_choices(self, *args, **kwargs): - self.module.cut_choices(*args, **kwargs) - - def export(self, logger): - return self.module.export(logger) - - -class DartsDiscreteMutator(Mutator): - - def __init__(self, model, parent_mutator): - super().__init__(model) - self.__dict__["parent_mutator"] = parent_mutator # avoid parameters to be included - - def sample_search(self): - return self.parent_mutator.sample_final() - - -class InteractiveKLLoss(nn.Module): - def __init__(self, temperature): - super().__init__() - self.temperature = temperature - # self.kl_loss = nn.KLDivLoss(reduction = 'batchmean') - self.kl_loss = nn.KLDivLoss() - - def forward(self, student, teacher): - return self.kl_loss(F.log_softmax(student / self.temperature, dim=1), - F.softmax(teacher / self.temperature, dim=1)) - - -class CdartsTrainer(object): - def __init__(self, model_small, model_large, criterion, loaders, samplers, logger, config): - train_loader, valid_loader = loaders - train_sampler, valid_sampler = samplers - self.train_loader = CyclicIterator(train_loader, train_sampler, config.distributed) - self.valid_loader = CyclicIterator(valid_loader, valid_sampler, config.distributed) - - self.regular_coeff = config.regular_coeff - self.regular_ratio = config.regular_ratio - self.warmup_epochs = config.warmup_epochs - self.fix_head = config.fix_head - self.epochs = config.epochs - self.steps_per_epoch = config.steps_per_epoch - if self.steps_per_epoch is None: - self.steps_per_epoch = min(len(self.train_loader), len(self.valid_loader)) - self.loss_alpha = config.loss_alpha - self.grad_clip = config.grad_clip - if config.interactive_type == "kl": - self.interactive_loss = InteractiveKLLoss(config.loss_T) - elif config.interactive_type == "smoothl1": - self.interactive_loss = nn.SmoothL1Loss() - self.loss_T = config.loss_T - self.distributed = config.distributed - self.log_frequency = config.log_frequency - self.main_proc = not config.distributed or config.local_rank == 0 - - self.logger = logger - self.checkpoint_dir = config.output_path - if self.main_proc: - os.makedirs(self.checkpoint_dir, exist_ok=True) - if config.distributed: - torch.distributed.barrier() - - self.model_small = model_small - self.model_large = model_large - if self.fix_head: - for param in self.model_small.aux_head.parameters(): - param.requires_grad = False - for param in self.model_large.aux_head.parameters(): - param.requires_grad = False - - self.mutator_small = RegularizedDartsMutator(self.model_small).cuda() - self.mutator_large = DartsDiscreteMutator(self.model_large, self.mutator_small).cuda() - self.criterion = criterion - - self.optimizer_small = torch.optim.SGD(self.model_small.parameters(), config.w_lr, - momentum=config.w_momentum, weight_decay=config.w_weight_decay) - self.optimizer_large = torch.optim.SGD(self.model_large.parameters(), config.nasnet_lr, - momentum=config.w_momentum, weight_decay=config.w_weight_decay) - self.optimizer_alpha = torch.optim.Adam(self.mutator_small.parameters(), config.alpha_lr, - betas=(0.5, 0.999), weight_decay=config.alpha_weight_decay) - - if config.distributed: - apex.parallel.convert_syncbn_model(self.model_small) - apex.parallel.convert_syncbn_model(self.model_large) - self.model_small = DistributedDataParallel(self.model_small, delay_allreduce=True) - self.model_large = DistributedDataParallel(self.model_large, delay_allreduce=True) - self.mutator_small = RegularizedMutatorParallel(self.mutator_small, delay_allreduce=True) - if config.share_module: - self.model_small.callback_queued = True - self.model_large.callback_queued = True - # mutator large never gets optimized, so do not need parallelized - - def warmup(self, phase, epoch): - assert phase in [PHASE_SMALL, PHASE_LARGE] - if phase == PHASE_SMALL: - model, optimizer = self.model_small, self.optimizer_small - elif phase == PHASE_LARGE: - model, optimizer = self.model_large, self.optimizer_large - model.train() - meters = AverageMeterGroup() - for step in range(self.steps_per_epoch): - x, y = next(self.train_loader) - x, y = x.cuda(), y.cuda() - - optimizer.zero_grad() - logits_main, _ = model(x) - loss = self.criterion(logits_main, y) - loss.backward() - - self._clip_grad_norm(model) - optimizer.step() - prec1, prec5 = accuracy(logits_main, y, topk=(1, 5)) - metrics = {"prec1": prec1, "prec5": prec5, "loss": loss} - metrics = reduce_metrics(metrics, self.distributed) - meters.update(metrics) - if self.main_proc and (step % self.log_frequency == 0 or step + 1 == self.steps_per_epoch): - self.logger.info("Epoch [%d/%d] Step [%d/%d] (%s) %s", epoch + 1, self.epochs, - step + 1, self.steps_per_epoch, phase, meters) - - def _clip_grad_norm(self, model): - if isinstance(model, DistributedDataParallel): - nn.utils.clip_grad_norm_(model.module.parameters(), self.grad_clip) - else: - nn.utils.clip_grad_norm_(model.parameters(), self.grad_clip) - - def _reset_nan(self, parameters): - with torch.no_grad(): - for param in parameters: - for i, p in enumerate(param): - if p != p: # equivalent to `isnan(p)` - param[i] = float("-inf") - - def joint_train(self, epoch): - self.model_large.train() - self.model_small.train() - meters = AverageMeterGroup() - for step in range(self.steps_per_epoch): - trn_x, trn_y = next(self.train_loader) - val_x, val_y = next(self.valid_loader) - trn_x, trn_y = trn_x.cuda(), trn_y.cuda() - val_x, val_y = val_x.cuda(), val_y.cuda() - - # step 1. optimize architecture - self.optimizer_alpha.zero_grad() - self.optimizer_large.zero_grad() - reg_decay = max(self.regular_coeff * (1 - float(epoch - self.warmup_epochs) / ( - (self.epochs - self.warmup_epochs) * self.regular_ratio)), 0) - loss_regular = self.mutator_small.reset_with_loss() - if loss_regular: - loss_regular *= reg_decay - logits_search, emsemble_logits_search = self.model_small(val_x) - logits_main, emsemble_logits_main = self.model_large(val_x) - loss_cls = (self.criterion(logits_search, val_y) + self.criterion(logits_main, val_y)) / self.loss_alpha - loss_interactive = self.interactive_loss(emsemble_logits_search, emsemble_logits_main) * (self.loss_T ** 2) * self.loss_alpha - loss = loss_cls + loss_interactive + loss_regular - loss.backward() - self._clip_grad_norm(self.model_large) - self.optimizer_large.step() - self.optimizer_alpha.step() - # NOTE: need to call here `self._reset_nan(self.mutator_small.parameters())` if `cut_choices` - - # step 2. optimize op weights - self.optimizer_small.zero_grad() - with torch.no_grad(): - # resample architecture since parameters have been changed - self.mutator_small.reset_with_loss() - logits_search_train, _ = self.model_small(trn_x) - loss_weight = self.criterion(logits_search_train, trn_y) - loss_weight.backward() - self._clip_grad_norm(self.model_small) - self.optimizer_small.step() - - metrics = {"loss_cls": loss_cls, "loss_interactive": loss_interactive, - "loss_regular": loss_regular, "loss_weight": loss_weight} - metrics = reduce_metrics(metrics, self.distributed) - meters.update(metrics) - - if self.main_proc and (step % self.log_frequency == 0 or step + 1 == self.steps_per_epoch): - self.logger.info("Epoch [%d/%d] Step [%d/%d] (joint) %s", epoch + 1, self.epochs, - step + 1, self.steps_per_epoch, meters) - - def train(self): - for epoch in range(self.epochs): - if epoch < self.warmup_epochs: - with torch.no_grad(): # otherwise grads will be retained on the architecture params - self.mutator_small.reset_with_loss() - self.warmup(PHASE_SMALL, epoch) - else: - with torch.no_grad(): - self.mutator_large.reset() - self.warmup(PHASE_LARGE, epoch) - self.joint_train(epoch) - - self.export(os.path.join(self.checkpoint_dir, "epoch_{:02d}.json".format(epoch)), - os.path.join(self.checkpoint_dir, "epoch_{:02d}.genotypes".format(epoch))) - - def export(self, file, genotype_file): - if self.main_proc: - mutator_export, genotypes = self.mutator_small.export(self.logger) - with open(file, "w") as f: - json.dump(mutator_export, f, indent=2, sort_keys=True, cls=TorchTensorEncoder) - with open(genotype_file, "w") as f: - f.write(str(genotypes)) diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py index d7aaa049a6..dd76fa5632 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py @@ -1,12 +1,9 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT license. -import logging - import torch -import torch.nn as nn -import torch.nn.functional as F +from apex.parallel import DistributedDataParallel # pylint: disable=import-error from nni.nas.pytorch.darts import DartsMutator from nni.nas.pytorch.mutables import LayerChoice from nni.nas.pytorch.mutator import Mutator diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py index 07fdd47649..878294cfa2 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py @@ -1,16 +1,14 @@ import json -import logging import os - import torch import torch.nn as nn +import torch.distributed as dist import torch.nn.functional as F +import apex # pylint: disable=import-error -import apex -from apex.parallel import DistributedDataParallel +from apex.parallel import DistributedDataParallel # pylint: disable=import-error from nni.nas.pytorch.cdarts import RegularizedDartsMutator, RegularizedMutatorParallel, DartsDiscreteMutator from nni.nas.pytorch.utils import AverageMeterGroup -from utils import CyclicIterator, TorchTensorEncoder, accuracy, reduce_metrics PHASE_SMALL = "small" PHASE_LARGE = "large" @@ -28,36 +26,100 @@ def forward(self, student, teacher): class CdartsTrainer(object): - def __init__(self, model_small, model_large, criterion, loaders, samplers, logger, config): + def __init__(self, model_small, model_large, criterion, loaders, samplers, logger, + regular_coeff=5, regular_ratio=0.2, warmup_epochs=2, fix_head=True, + epochs=32, steps_per_epoch=None, loss_alpha=2, loss_T=2, distributed=True, + log_frequency=10, grad_clip=5.0, interactive_type='kl', output_path='./outputs', + w_lr=0.2, w_momentum=0.9, w_weight_decay=3e-4, alpha_lr=0.2, alpha_weight_decay=1e-4, + nasnet_lr=0.2, local_rank=0, share_module=True): + """ + Initialize a CdartsTrainer. + Parameters + ---------- + model_small : nn.Module + PyTorch model to be trained. This is the search network of CDARTS. + model_large : nn.Module + PyTorch model to be trained. This is the evaluation network of CDARTS. + criterion : callable + Receives logits and ground truth label, return a loss tensor. + loaders : list + List of training dataset and test dataset. Will be split for training weights and architecture weights. + samplers : list of Dateset Samplers + List of training dataset and test dataset samplers. + logger : callable + The logging object. It receives the contents for logging. + regular_coeff : float + The coefficient of regular loss. + regular_ratio : float + The ratio of regular loss. + warmup_epochs : int + The epochs to warmup the search network + fix_head : bool + ``True`` if fixing the paramters of auxiliary heads, else unfix the paramters of auxiliary heads. + epochs : int + Number of epochs planned for training. + steps_per_epoch : int + Steps of one epoch. + loss_alpha : float + The loss coefficient. + loss_T : float + The loss coefficient. + distributed : bool + ``True`` if using distributed training, else non-distributed training. + log_frequency : int + Step count per logging. + grad_clip : float + Gradient clipping for weights. + interactive_type : string + ``kl`` or ``smoothl1``. + output_path : string + Log storage path. + w_lr : float + Learning rate of the search network parameters. + w_momentum : float + Momentum of the search and the evaluation network. + w_weight_decay : float + The weight decay the search and the evaluation network parameters. + alpha_lr : float + Learning rate of the architecture parameters. + alpha_weight_decay : float + The weight decay the architecture parameters. + nasnet_lr : float + Learning rate of the evaluation network parameters. + local_rank : int + The number of thread. + share_module : bool + ``True`` if sharing the stem and auxiliary heads, else not sharing these modules. + """ train_loader, valid_loader = loaders train_sampler, valid_sampler = samplers - self.train_loader = CyclicIterator(train_loader, train_sampler, config.distributed) - self.valid_loader = CyclicIterator(valid_loader, valid_sampler, config.distributed) - - self.regular_coeff = config.regular_coeff - self.regular_ratio = config.regular_ratio - self.warmup_epochs = config.warmup_epochs - self.fix_head = config.fix_head - self.epochs = config.epochs - self.steps_per_epoch = config.steps_per_epoch + self.train_loader = CyclicIterator(train_loader, train_sampler, distributed) + self.valid_loader = CyclicIterator(valid_loader, valid_sampler, distributed) + + self.regular_coeff = regular_coeff + self.regular_ratio = regular_ratio + self.warmup_epochs = warmup_epochs + self.fix_head = fix_head + self.epochs = epochs + self.steps_per_epoch = steps_per_epoch if self.steps_per_epoch is None: self.steps_per_epoch = min(len(self.train_loader), len(self.valid_loader)) - self.loss_alpha = config.loss_alpha - self.grad_clip = config.grad_clip - if config.interactive_type == "kl": - self.interactive_loss = InteractiveKLLoss(config.loss_T) - elif config.interactive_type == "smoothl1": + self.loss_alpha = loss_alpha + self.grad_clip = grad_clip + if interactive_type == "kl": + self.interactive_loss = InteractiveKLLoss(loss_T) + elif interactive_type == "smoothl1": self.interactive_loss = nn.SmoothL1Loss() - self.loss_T = config.loss_T - self.distributed = config.distributed - self.log_frequency = config.log_frequency - self.main_proc = not config.distributed or config.local_rank == 0 + self.loss_T = loss_T + self.distributed = distributed + self.log_frequency = log_frequency + self.main_proc = not distributed or local_rank == 0 self.logger = logger - self.checkpoint_dir = config.output_path + self.checkpoint_dir = output_path if self.main_proc: os.makedirs(self.checkpoint_dir, exist_ok=True) - if config.distributed: + if distributed: torch.distributed.barrier() self.model_small = model_small @@ -72,20 +134,20 @@ def __init__(self, model_small, model_large, criterion, loaders, samplers, logge self.mutator_large = DartsDiscreteMutator(self.model_large, self.mutator_small).cuda() self.criterion = criterion - self.optimizer_small = torch.optim.SGD(self.model_small.parameters(), config.w_lr, - momentum=config.w_momentum, weight_decay=config.w_weight_decay) - self.optimizer_large = torch.optim.SGD(self.model_large.parameters(), config.nasnet_lr, - momentum=config.w_momentum, weight_decay=config.w_weight_decay) - self.optimizer_alpha = torch.optim.Adam(self.mutator_small.parameters(), config.alpha_lr, - betas=(0.5, 0.999), weight_decay=config.alpha_weight_decay) + self.optimizer_small = torch.optim.SGD(self.model_small.parameters(), w_lr, + momentum=w_momentum, weight_decay=w_weight_decay) + self.optimizer_large = torch.optim.SGD(self.model_large.parameters(), nasnet_lr, + momentum=w_momentum, weight_decay=w_weight_decay) + self.optimizer_alpha = torch.optim.Adam(self.mutator_small.parameters(), alpha_lr, + betas=(0.5, 0.999), weight_decay=alpha_weight_decay) - if config.distributed: + if distributed: apex.parallel.convert_syncbn_model(self.model_small) apex.parallel.convert_syncbn_model(self.model_large) self.model_small = DistributedDataParallel(self.model_small, delay_allreduce=True) self.model_large = DistributedDataParallel(self.model_large, delay_allreduce=True) self.mutator_small = RegularizedMutatorParallel(self.mutator_small, delay_allreduce=True) - if config.share_module: + if share_module: self.model_small.callback_queued = True self.model_large.callback_queued = True # mutator large never gets optimized, so do not need parallelized @@ -201,3 +263,71 @@ def export(self, file, genotype_file): json.dump(mutator_export, f, indent=2, sort_keys=True, cls=TorchTensorEncoder) with open(genotype_file, "w") as f: f.write(str(genotypes)) + +class CyclicIterator: + def __init__(self, loader, sampler, distributed): + self.loader = loader + self.sampler = sampler + self.epoch = 0 + self.distributed = distributed + self._next_epoch() + + def _next_epoch(self): + if self.distributed: + self.sampler.set_epoch(self.epoch) + self.iterator = iter(self.loader) + self.epoch += 1 + + def __len__(self): + return len(self.loader) + + def __iter__(self): + return self + + def __next__(self): + try: + return next(self.iterator) + except StopIteration: + self._next_epoch() + return next(self.iterator) + +class TorchTensorEncoder(json.JSONEncoder): + def default(self, o): # pylint: disable=method-hidden + if isinstance(o, torch.Tensor): + olist = o.tolist() + if "bool" not in o.type().lower() and all(map(lambda d: d == 0 or d == 1, olist)): + _logger.warning("Every element in %s is either 0 or 1. " + "You might consider convert it into bool.", olist) + return olist + return super().default(o) + +def accuracy(output, target, topk=(1,)): + """ Computes the precision@k for the specified values of k """ + maxk = max(topk) + batch_size = target.size(0) + + _, pred = output.topk(maxk, 1, True, True) + pred = pred.t() + # one-hot case + if target.ndimension() > 1: + target = target.max(1)[1] + + correct = pred.eq(target.view(1, -1).expand_as(pred)) + + res = [] + for k in topk: + correct_k = correct[:k].view(-1).float().sum(0) + res.append(correct_k.mul_(1.0 / batch_size)) + return res + +def reduce_tensor(tensor): + rt = tensor.clone() + dist.all_reduce(rt, op=dist.ReduceOp.SUM) + rt /= float(os.environ["WORLD_SIZE"]) + return rt + + +def reduce_metrics(metrics, distributed=False): + if distributed: + return {k: reduce_tensor(v).item() for k, v in metrics.items()} + return {k: v.item() for k, v in metrics.items()} From 4543d3f5a093b87003816efec57d26972a69bb4d Mon Sep 17 00:00:00 2001 From: "penghouwen@icloud.com" Date: Wed, 15 Jan 2020 12:55:12 +0800 Subject: [PATCH 03/21] update readme --- README.md | 742 +++++++++++++++++++------------------ docs/en_US/NAS/Overview.md | 2 +- 2 files changed, 373 insertions(+), 371 deletions(-) diff --git a/README.md b/README.md index edf3638413..27912a6725 100644 --- a/README.md +++ b/README.md @@ -1,370 +1,372 @@ -

- -

- ------------ - -[![MIT licensed](https://img.shields.io/badge/license-MIT-brightgreen.svg)](LICENSE) -[![Build Status](https://msrasrg.visualstudio.com/NNIOpenSource/_apis/build/status/Microsoft.nni)](https://msrasrg.visualstudio.com/NNIOpenSource/_build/latest?definitionId=6) -[![Issues](https://img.shields.io/github/issues-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen) -[![Bugs](https://img.shields.io/github/issues/Microsoft/nni/bug.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen+label%3Abug) -[![Pull Requests](https://img.shields.io/github/issues-pr-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/pulls?q=is%3Apr+is%3Aopen) -[![Version](https://img.shields.io/github/release/Microsoft/nni.svg)](https://github.com/Microsoft/nni/releases) [![Join the chat at https://gitter.im/Microsoft/nni](https://badges.gitter.im/Microsoft/nni.svg)](https://gitter.im/Microsoft/nni?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -[![Documentation Status](https://readthedocs.org/projects/nni/badge/?version=latest)](https://nni.readthedocs.io/en/latest/?badge=latest) - -[简体中文](README_zh_CN.md) - -**NNI (Neural Network Intelligence)** is a lightweight but powerful toolkit to help users **automate**
Feature Engineering, Neural Architecture Search, Hyperparameter Tuning and Model Compression. - -The tool manages automated machine learning (AutoML) experiments, **dispatches and runs** experiments' trial jobs generated by tuning algorithms to search the best neural architecture and/or hyper-parameters in **different training environments** like Local Machine, Remote Servers, OpenPAI, Kubeflow, FrameworkController on K8S (AKS etc.) and other cloud options. - -## **Who should consider using NNI** - -* Those who want to **try different AutoML algorithms** in their training code/model. -* Those who want to run AutoML trial jobs **in different environments** to speed up search. -* Researchers and data scientists who want to easily **implement and experiement new AutoML algorithms**, may it be: hyperparameter tuning algorithm, neural architect search algorithm or model compression algorithm. -* ML Platform owners who want to **support AutoML in their platform**. - -### **NNI v1.2 has been released!  ** - -## **NNI capabilities in a glance** -NNI provides CommandLine Tool as well as an user friendly WebUI to manage training experiements. With the extensible API, you can customize your own AutoML algorithms and training services. To make it easy for new users, NNI also provides a set of build-in stat-of-the-art AutoML algorithms and out of box support for popular training platforms. - -Within the following table, we summarized the current NNI capabilities, we are gradually adding new capabilities and we'd love to have your contribution. - -

- -

- - - - - - - - - - - - - - - - - - - - - - - - - - -
- - Frameworks & Libraries - - - Algorithms - - - Training Services - -
- Built-in - -
  • Supported Frameworks
  • -
      -
    • PyTorch
    • -
    • Keras
    • -
    • TensorFlow
    • -
    • MXNet
    • -
    • Caffe2
    • - More...
      -
    -
-
    -
  • Supported Libraries
  • -
      -
    • Scikit-learn
    • -
    • XGBoost
    • -
    • LightGBM
    • - More...
      -
    -
- -
- Hyperparameter Tuning - - Neural Architecture Search - - Model Compression - - Feature Engineering (Beta) - - Early Stop Algorithms - - - -
- References - - - - - - -
- -## **Install & Verify** - -**Install through pip** - -* We support Linux, MacOS and Windows (local, remote and pai mode) in current stage, Ubuntu 16.04 or higher, MacOS 10.14.1 along with Windows 10.1809 are tested and supported. Simply run the following `pip install` in an environment that has `python >= 3.5`. - -Linux and MacOS - -```bash -python3 -m pip install --upgrade nni -``` - -Windows - -```bash -python -m pip install --upgrade nni -``` - -Note: - -* `--user` can be added if you want to install NNI in your home directory, which does not require any special privileges. -* Currently NNI on Windows support local, remote and pai mode. Anaconda or Miniconda is highly recommended to install NNI on Windows. -* If there is any error like `Segmentation fault`, please refer to [FAQ](docs/en_US/Tutorial/FAQ.md) - -**Install through source code** - -* We support Linux (Ubuntu 16.04 or higher), MacOS (10.14.1) and Windows (10.1809) in our current stage. - -Linux and MacOS - -* Run the following commands in an environment that has `python >= 3.5`, `git` and `wget`. - -```bash - git clone -b v1.2 https://github.com/Microsoft/nni.git - cd nni - source install.sh -``` - -Windows - -* Run the following commands in an environment that has `python >=3.5`, `git` and `PowerShell` - -```bash - git clone -b v1.2 https://github.com/Microsoft/nni.git - cd nni - powershell -ExecutionPolicy Bypass -file install.ps1 -``` - -For the system requirements of NNI, please refer to [Install NNI](docs/en_US/Tutorial/Installation.md) - -For NNI on Windows, please refer to [NNI on Windows](docs/en_US/Tutorial/NniOnWindows.md) - -**Verify install** - -The following example is an experiment built on TensorFlow. Make sure you have **TensorFlow 1.x installed** before running it. Note that **currently Tensorflow 2.0 is NOT supported**. - -* Download the examples via clone the source code. - -```bash - git clone -b v1.2 https://github.com/Microsoft/nni.git -``` - -Linux and MacOS - -* Run the MNIST example. - -```bash - nnictl create --config nni/examples/trials/mnist-tfv1/config.yml -``` - -Windows - -* Run the MNIST example. - -```bash - nnictl create --config nni\examples\trials\mnist-tfv1\config_windows.yml -``` - -* Wait for the message `INFO: Successfully started experiment!` in the command line. This message indicates that your experiment has been successfully started. You can explore the experiment using the `Web UI url`. - -```text -INFO: Starting restful server... -INFO: Successfully started Restful server! -INFO: Setting local config... -INFO: Successfully set local config! -INFO: Starting experiment... -INFO: Successfully started experiment! ------------------------------------------------------------------------ -The experiment id is egchD4qy -The Web UI urls are: http://223.255.255.1:8080 http://127.0.0.1:8080 ------------------------------------------------------------------------ - -You can use these commands to get more information about the experiment ------------------------------------------------------------------------ - commands description -1. nnictl experiment show show the information of experiments -2. nnictl trial ls list all of trial jobs -3. nnictl top monitor the status of running experiments -4. nnictl log stderr show stderr log content -5. nnictl log stdout show stdout log content -6. nnictl stop stop an experiment -7. nnictl trial kill kill a trial job by id -8. nnictl --help get help information about nnictl ------------------------------------------------------------------------ -``` - -* Open the `Web UI url` in your browser, you can view detail information of the experiment and all the submitted trial jobs as shown below. [Here](docs/en_US/Tutorial/WebUI.md) are more Web UI pages. - - - - -
drawingdrawing
- -## **Documentation** -* To learn about what's NNI, read the [NNI Overview](https://nni.readthedocs.io/en/latest/Overview.html). -* To get yourself familiar with how to use NNI, read the [documentation](https://nni.readthedocs.io/en/latest/index.html). -* To get started and install NNI on your system, please refer to [Install NNI](docs/en_US/Tutorial/Installation.md). - -## **Contributing** -This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com. - -When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA. - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the Code of [Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact opencode@microsoft.com with any additional questions or comments. - -After getting familiar with contribution agreements, you are ready to create your first PR =), follow the NNI developer tutorials to get start: -* We recommend new contributors to start with ['good first issue'](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) or ['help-wanted'](https://github.com/microsoft/nni/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22), these issues are simple and easy to start. -* [NNI developer environment installation tutorial](docs/en_US/Tutorial/SetupNniDeveloperEnvironment.md) -* [How to debug](docs/en_US/Tutorial/HowToDebug.md) -* [Customize your own Tuner](docs/en_US/Tuner/CustomizeTuner.md) -* [Implement customized TrainingService](docs/en_US/TrainingService/HowToImplementTrainingService.md) -* [Implement a new NAS trainer on NNI](https://github.com/microsoft/nni/blob/master/docs/en_US/NAS/NasInterface.md#implement-a-new-nas-trainer-on-nni) -* [Customize your own Advisor](docs/en_US/Tuner/CustomizeAdvisor.md) - -## **External Repositories and References** -With authors' permission, we listed a set of NNI usage examples and relevant articles. -* ### **External Repositories** ### - * Run [ENAS](examples/tuners/enas_nni/README.md) with NNI - * Run [Neural Network Architecture Search](examples/trials/nas_cifar10/README.md) with NNI - * [Automatic Feature Engineering](examples/feature_engineering/auto-feature-engineering/README.md) with NNI - * [Hyperparameter Tuning for Matrix Factorization](https://github.com/microsoft/recommenders/blob/master/notebooks/04_model_select_and_optimize/nni_surprise_svd.ipynb) with NNI - * [scikit-nni](https://github.com/ksachdeva/scikit-nni) Hyper-parameter search for scikit-learn pipelines using NNI - -* ### **Relevant Articles** ### - - * [Hyper Parameter Optimization Comparison](docs/en_US/CommunitySharings/HpoComparision.md) - * [Neural Architecture Search Comparison](docs/en_US/CommunitySharings/NasComparision.md) - * [Parallelizing a Sequential Algorithm TPE](docs/en_US/CommunitySharings/ParallelizingTpeSearch.md) - * [Automatically tuning SVD with NNI](docs/en_US/CommunitySharings/RecommendersSvd.md) - * [Automatically tuning SPTAG with NNI](docs/en_US/CommunitySharings/SptagAutoTune.md) - * [Find thy hyper-parameters for scikit-learn pipelines using Microsoft NNI](https://towardsdatascience.com/find-thy-hyper-parameters-for-scikit-learn-pipelines-using-microsoft-nni-f1015b1224c1) - * **Blog (in Chinese)** - [AutoML tools (Advisor, NNI and Google Vizier) comparison](http://gaocegege.com/Blog/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/katib-new#%E6%80%BB%E7%BB%93%E4%B8%8E%E5%88%86%E6%9E%90) by [@gaocegege](https://github.com/gaocegege) - 总结与分析 section of design and implementation of kubeflow/katib - -## **Feedback** -* Discuss on the NNI [Gitter](https://gitter.im/Microsoft/nni?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) in NNI. -* [File an issue](https://github.com/microsoft/nni/issues/new/choose) on GitHub. -* Ask a question with NNI tags on [Stack Overflow](https://stackoverflow.com/questions/tagged/nni?sort=Newest&edited=true). - -## Related Projects -Targeting at openness and advancing state-of-art technology, [Microsoft Research (MSR)](https://www.microsoft.com/en-us/research/group/systems-research-group-asia/) had also released few other open source projects. - -* [OpenPAI](https://github.com/Microsoft/pai) : an open source platform that provides complete AI model training and resource management capabilities, it is easy to extend and supports on-premise, cloud and hybrid environments in various scale. -* [FrameworkController](https://github.com/Microsoft/frameworkcontroller) : an open source general-purpose Kubernetes Pod Controller that orchestrate all kinds of applications on Kubernetes by a single controller. -* [MMdnn](https://github.com/Microsoft/MMdnn) : A comprehensive, cross-framework solution to convert, visualize and diagnose deep neural network models. The "MM" in MMdnn stands for model management and "dnn" is an acronym for deep neural network. -* [SPTAG](https://github.com/Microsoft/SPTAG) : Space Partition Tree And Graph (SPTAG) is an open source library for large scale vector approximate nearest neighbor search scenario. - -We encourage researchers and students leverage these projects to accelerate the AI development and research. - -## **License** - -The entire codebase is under [MIT license](LICENSE) - +

+ +

+ +----------- + +[![MIT licensed](https://img.shields.io/badge/license-MIT-brightgreen.svg)](LICENSE) +[![Build Status](https://msrasrg.visualstudio.com/NNIOpenSource/_apis/build/status/integration-test-local?branchName=master)](https://msrasrg.visualstudio.com/NNIOpenSource/_build/latest?definitionId=17&branchName=master) +[![Issues](https://img.shields.io/github/issues-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen) +[![Bugs](https://img.shields.io/github/issues/Microsoft/nni/bug.svg)](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen+label%3Abug) +[![Pull Requests](https://img.shields.io/github/issues-pr-raw/Microsoft/nni.svg)](https://github.com/Microsoft/nni/pulls?q=is%3Apr+is%3Aopen) +[![Version](https://img.shields.io/github/release/Microsoft/nni.svg)](https://github.com/Microsoft/nni/releases) [![Join the chat at https://gitter.im/Microsoft/nni](https://badges.gitter.im/Microsoft/nni.svg)](https://gitter.im/Microsoft/nni?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Documentation Status](https://readthedocs.org/projects/nni/badge/?version=latest)](https://nni.readthedocs.io/en/latest/?badge=latest) + +[简体中文](README_zh_CN.md) + +**NNI (Neural Network Intelligence)** is a lightweight but powerful toolkit to help users **automate** Feature Engineering, Neural Architecture Search, Hyperparameter Tuning and Model Compression. + +The tool manages automated machine learning (AutoML) experiments, **dispatches and runs** experiments' trial jobs generated by tuning algorithms to search the best neural architecture and/or hyper-parameters in **different training environments** like Local Machine, Remote Servers, OpenPAI, Kubeflow, FrameworkController on K8S (AKS etc.) and other cloud options. + +## **Who should consider using NNI** + +* Those who want to **try different AutoML algorithms** in their training code/model. +* Those who want to run AutoML trial jobs **in different environments** to speed up search. +* Researchers and data scientists who want to easily **implement and experiement new AutoML algorithms**, may it be: hyperparameter tuning algorithm, neural architect search algorithm or model compression algorithm. +* ML Platform owners who want to **support AutoML in their platform**. + +### **NNI v1.3 has been released!  ** + +## **NNI capabilities in a glance** +NNI provides CommandLine Tool as well as an user friendly WebUI to manage training experiements. With the extensible API, you can customize your own AutoML algorithms and training services. To make it easy for new users, NNI also provides a set of build-in stat-of-the-art AutoML algorithms and out of box support for popular training platforms. + +Within the following table, we summarized the current NNI capabilities, we are gradually adding new capabilities and we'd love to have your contribution. + +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Frameworks & Libraries + + + Algorithms + + + Training Services + +
+ Built-in + +
  • Supported Frameworks
  • +
      +
    • PyTorch
    • +
    • Keras
    • +
    • TensorFlow
    • +
    • MXNet
    • +
    • Caffe2
    • + More...
      +
    +
+
    +
  • Supported Libraries
  • +
      +
    • Scikit-learn
    • +
    • XGBoost
    • +
    • LightGBM
    • + More...
      +
    +
+ +
+ Hyperparameter Tuning + + Neural Architecture Search + + Model Compression + + Feature Engineering (Beta) + + Early Stop Algorithms + + + +
+ References + + + + + + +
+ +## **Install & Verify** + +**Install through pip** + +* We support Linux, MacOS and Windows (local, remote and pai mode) in current stage, Ubuntu 16.04 or higher, MacOS 10.14.1 along with Windows 10.1809 are tested and supported. Simply run the following `pip install` in an environment that has `python >= 3.5`. + +Linux and MacOS + +```bash +python3 -m pip install --upgrade nni +``` + +Windows + +```bash +python -m pip install --upgrade nni +``` + +Note: + +* `--user` can be added if you want to install NNI in your home directory, which does not require any special privileges. +* Currently NNI on Windows support local, remote and pai mode. Anaconda or Miniconda is highly recommended to install NNI on Windows. +* If there is any error like `Segmentation fault`, please refer to [FAQ](docs/en_US/Tutorial/FAQ.md) + +**Install through source code** + +* We support Linux (Ubuntu 16.04 or higher), MacOS (10.14.1) and Windows (10.1809) in our current stage. + +Linux and MacOS + +* Run the following commands in an environment that has `python >= 3.5`, `git` and `wget`. + +```bash + git clone -b v1.3 https://github.com/Microsoft/nni.git + cd nni + source install.sh +``` + +Windows + +* Run the following commands in an environment that has `python >=3.5`, `git` and `PowerShell` + +```bash + git clone -b v1.3 https://github.com/Microsoft/nni.git + cd nni + powershell -ExecutionPolicy Bypass -file install.ps1 +``` + +For the system requirements of NNI, please refer to [Install NNI](docs/en_US/Tutorial/Installation.md) + +For NNI on Windows, please refer to [NNI on Windows](docs/en_US/Tutorial/NniOnWindows.md) + +**Verify install** + +The following example is an experiment built on TensorFlow. Make sure you have **TensorFlow 1.x installed** before running it. Note that **currently Tensorflow 2.0 is NOT supported**. + +* Download the examples via clone the source code. + +```bash + git clone -b v1.3 https://github.com/Microsoft/nni.git +``` + +Linux and MacOS + +* Run the MNIST example. + +```bash + nnictl create --config nni/examples/trials/mnist-tfv1/config.yml +``` + +Windows + +* Run the MNIST example. + +```bash + nnictl create --config nni\examples\trials\mnist-tfv1\config_windows.yml +``` + +* Wait for the message `INFO: Successfully started experiment!` in the command line. This message indicates that your experiment has been successfully started. You can explore the experiment using the `Web UI url`. + +```text +INFO: Starting restful server... +INFO: Successfully started Restful server! +INFO: Setting local config... +INFO: Successfully set local config! +INFO: Starting experiment... +INFO: Successfully started experiment! +----------------------------------------------------------------------- +The experiment id is egchD4qy +The Web UI urls are: http://223.255.255.1:8080 http://127.0.0.1:8080 +----------------------------------------------------------------------- + +You can use these commands to get more information about the experiment +----------------------------------------------------------------------- + commands description +1. nnictl experiment show show the information of experiments +2. nnictl trial ls list all of trial jobs +3. nnictl top monitor the status of running experiments +4. nnictl log stderr show stderr log content +5. nnictl log stdout show stdout log content +6. nnictl stop stop an experiment +7. nnictl trial kill kill a trial job by id +8. nnictl --help get help information about nnictl +----------------------------------------------------------------------- +``` + +* Open the `Web UI url` in your browser, you can view detail information of the experiment and all the submitted trial jobs as shown below. [Here](docs/en_US/Tutorial/WebUI.md) are more Web UI pages. + + + + +
drawingdrawing
+ +## **Documentation** +* To learn about what's NNI, read the [NNI Overview](https://nni.readthedocs.io/en/latest/Overview.html). +* To get yourself familiar with how to use NNI, read the [documentation](https://nni.readthedocs.io/en/latest/index.html). +* To get started and install NNI on your system, please refer to [Install NNI](docs/en_US/Tutorial/Installation.md). + +## **Contributing** +This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com. + +When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA. + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the Code of [Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact opencode@microsoft.com with any additional questions or comments. + +After getting familiar with contribution agreements, you are ready to create your first PR =), follow the NNI developer tutorials to get start: +* We recommend new contributors to start with ['good first issue'](https://github.com/Microsoft/nni/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) or ['help-wanted'](https://github.com/microsoft/nni/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22), these issues are simple and easy to start. +* [NNI developer environment installation tutorial](docs/en_US/Tutorial/SetupNniDeveloperEnvironment.md) +* [How to debug](docs/en_US/Tutorial/HowToDebug.md) +* [Customize your own Tuner](docs/en_US/Tuner/CustomizeTuner.md) +* [Implement customized TrainingService](docs/en_US/TrainingService/HowToImplementTrainingService.md) +* [Implement a new NAS trainer on NNI](https://github.com/microsoft/nni/blob/master/docs/en_US/NAS/NasInterface.md#implement-a-new-nas-trainer-on-nni) +* [Customize your own Advisor](docs/en_US/Tuner/CustomizeAdvisor.md) + +## **External Repositories and References** +With authors' permission, we listed a set of NNI usage examples and relevant articles. +* ### **External Repositories** ### + * Run [ENAS](examples/tuners/enas_nni/README.md) with NNI + * Run [Neural Network Architecture Search](examples/trials/nas_cifar10/README.md) with NNI + * [Automatic Feature Engineering](examples/feature_engineering/auto-feature-engineering/README.md) with NNI + * [Hyperparameter Tuning for Matrix Factorization](https://github.com/microsoft/recommenders/blob/master/notebooks/04_model_select_and_optimize/nni_surprise_svd.ipynb) with NNI + * [scikit-nni](https://github.com/ksachdeva/scikit-nni) Hyper-parameter search for scikit-learn pipelines using NNI + +* ### **Relevant Articles** ### + + * [Hyper Parameter Optimization Comparison](docs/en_US/CommunitySharings/HpoComparision.md) + * [Neural Architecture Search Comparison](docs/en_US/CommunitySharings/NasComparision.md) + * [Parallelizing a Sequential Algorithm TPE](docs/en_US/CommunitySharings/ParallelizingTpeSearch.md) + * [Automatically tuning SVD with NNI](docs/en_US/CommunitySharings/RecommendersSvd.md) + * [Automatically tuning SPTAG with NNI](docs/en_US/CommunitySharings/SptagAutoTune.md) + * [Find thy hyper-parameters for scikit-learn pipelines using Microsoft NNI](https://towardsdatascience.com/find-thy-hyper-parameters-for-scikit-learn-pipelines-using-microsoft-nni-f1015b1224c1) + * **Blog (in Chinese)** - [AutoML tools (Advisor, NNI and Google Vizier) comparison](http://gaocegege.com/Blog/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/katib-new#%E6%80%BB%E7%BB%93%E4%B8%8E%E5%88%86%E6%9E%90) by [@gaocegege](https://github.com/gaocegege) - 总结与分析 section of design and implementation of kubeflow/katib + * **Blog (in Chinese)** - [A summary of NNI new capabilities in 2019](https://mp.weixin.qq.com/s/7_KRT-rRojQbNuJzkjFMuA) by @squirrelsc + +## **Feedback** +* Discuss on the NNI [Gitter](https://gitter.im/Microsoft/nni?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) in NNI. +* [File an issue](https://github.com/microsoft/nni/issues/new/choose) on GitHub. +* Ask a question with NNI tags on [Stack Overflow](https://stackoverflow.com/questions/tagged/nni?sort=Newest&edited=true). + +## Related Projects +Targeting at openness and advancing state-of-art technology, [Microsoft Research (MSR)](https://www.microsoft.com/en-us/research/group/systems-research-group-asia/) had also released few other open source projects. + +* [OpenPAI](https://github.com/Microsoft/pai) : an open source platform that provides complete AI model training and resource management capabilities, it is easy to extend and supports on-premise, cloud and hybrid environments in various scale. +* [FrameworkController](https://github.com/Microsoft/frameworkcontroller) : an open source general-purpose Kubernetes Pod Controller that orchestrate all kinds of applications on Kubernetes by a single controller. +* [MMdnn](https://github.com/Microsoft/MMdnn) : A comprehensive, cross-framework solution to convert, visualize and diagnose deep neural network models. The "MM" in MMdnn stands for model management and "dnn" is an acronym for deep neural network. +* [SPTAG](https://github.com/Microsoft/SPTAG) : Space Partition Tree And Graph (SPTAG) is an open source library for large scale vector approximate nearest neighbor search scenario. + +We encourage researchers and students leverage these projects to accelerate the AI development and research. + +## **License** + +The entire codebase is under [MIT license](LICENSE) + diff --git a/docs/en_US/NAS/Overview.md b/docs/en_US/NAS/Overview.md index 589ea4972b..1cd27c877d 100644 --- a/docs/en_US/NAS/Overview.md +++ b/docs/en_US/NAS/Overview.md @@ -22,7 +22,7 @@ NNI supports below NAS algorithms now and is adding more. User can reproduce an | [DARTS](DARTS.md) | [DARTS: Differentiable Architecture Search](https://arxiv.org/abs/1806.09055) introduces a novel algorithm for differentiable network architecture search on bilevel optimization. | | [P-DARTS](PDARTS.md) | [Progressive Differentiable Architecture Search: Bridging the Depth Gap between Search and Evaluation](https://arxiv.org/abs/1904.12760) is based on DARTS. It introduces an efficient algorithm which allows the depth of searched architectures to grow gradually during the training procedure. | | [SPOS](SPOS.md) | [Single Path One-Shot Neural Architecture Search with Uniform Sampling](https://arxiv.org/abs/1904.00420) constructs a simplified supernet trained with an uniform path sampling method, and applies an evolutionary algorithm to efficiently search for the best-performing architectures. | -| [CDARTS](PDARTS.md) | [Cyclic Differentiable Architecture Search](https://arxiv.org/abs/****) builds a cyclic feedback mechanism between the search and evaluation networks. It introduces a cyclic differentiable architecture search framework which integrates the two networks into a unified architecture.| +| [CDARTS](CDARTS.md) | [Cyclic Differentiable Architecture Search](https://arxiv.org/abs/****) builds a cyclic feedback mechanism between the search and evaluation networks. It introduces a cyclic differentiable architecture search framework which integrates the two networks into a unified architecture.| One-shot algorithms run **standalone without nnictl**. Only PyTorch version has been implemented. Tensorflow 2.x will be supported in future release. From 28b579c77701554f9b676745ce88e15a8f5375d0 Mon Sep 17 00:00:00 2001 From: "penghouwen@icloud.com" Date: Wed, 15 Jan 2020 17:06:30 +0800 Subject: [PATCH 04/21] new revisions --- .../pynni/nni/nas/pytorch/cdarts/trainer.py | 82 ++----------------- src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py | 72 ++++++++++++++++ 2 files changed, 79 insertions(+), 75 deletions(-) create mode 100644 src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py index 878294cfa2..109cc35ca0 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py @@ -2,13 +2,13 @@ import os import torch import torch.nn as nn -import torch.distributed as dist import torch.nn.functional as F import apex # pylint: disable=import-error from apex.parallel import DistributedDataParallel # pylint: disable=import-error from nni.nas.pytorch.cdarts import RegularizedDartsMutator, RegularizedMutatorParallel, DartsDiscreteMutator from nni.nas.pytorch.utils import AverageMeterGroup +from .utils import CyclicIterator, TorchTensorEncoder, accuracy, reduce_metrics PHASE_SMALL = "small" PHASE_LARGE = "large" @@ -152,7 +152,7 @@ def __init__(self, model_small, model_large, criterion, loaders, samplers, logge self.model_large.callback_queued = True # mutator large never gets optimized, so do not need parallelized - def warmup(self, phase, epoch): + def _warmup(self, phase, epoch): assert phase in [PHASE_SMALL, PHASE_LARGE] if phase == PHASE_SMALL: model, optimizer = self.model_small, self.optimizer_small @@ -192,7 +192,7 @@ def _reset_nan(self, parameters): if p != p: # equivalent to `isnan(p)` param[i] = float("-inf") - def joint_train(self, epoch): + def _joint_train(self, epoch): self.model_large.train() self.model_small.train() meters = AverageMeterGroup() @@ -246,12 +246,12 @@ def train(self): if epoch < self.warmup_epochs: with torch.no_grad(): # otherwise grads will be retained on the architecture params self.mutator_small.reset_with_loss() - self.warmup(PHASE_SMALL, epoch) + self._warmup(PHASE_SMALL, epoch) else: with torch.no_grad(): self.mutator_large.reset() - self.warmup(PHASE_LARGE, epoch) - self.joint_train(epoch) + self._warmup(PHASE_LARGE, epoch) + self._joint_train(epoch) self.export(os.path.join(self.checkpoint_dir, "epoch_{:02d}.json".format(epoch)), os.path.join(self.checkpoint_dir, "epoch_{:02d}.genotypes".format(epoch))) @@ -262,72 +262,4 @@ def export(self, file, genotype_file): with open(file, "w") as f: json.dump(mutator_export, f, indent=2, sort_keys=True, cls=TorchTensorEncoder) with open(genotype_file, "w") as f: - f.write(str(genotypes)) - -class CyclicIterator: - def __init__(self, loader, sampler, distributed): - self.loader = loader - self.sampler = sampler - self.epoch = 0 - self.distributed = distributed - self._next_epoch() - - def _next_epoch(self): - if self.distributed: - self.sampler.set_epoch(self.epoch) - self.iterator = iter(self.loader) - self.epoch += 1 - - def __len__(self): - return len(self.loader) - - def __iter__(self): - return self - - def __next__(self): - try: - return next(self.iterator) - except StopIteration: - self._next_epoch() - return next(self.iterator) - -class TorchTensorEncoder(json.JSONEncoder): - def default(self, o): # pylint: disable=method-hidden - if isinstance(o, torch.Tensor): - olist = o.tolist() - if "bool" not in o.type().lower() and all(map(lambda d: d == 0 or d == 1, olist)): - _logger.warning("Every element in %s is either 0 or 1. " - "You might consider convert it into bool.", olist) - return olist - return super().default(o) - -def accuracy(output, target, topk=(1,)): - """ Computes the precision@k for the specified values of k """ - maxk = max(topk) - batch_size = target.size(0) - - _, pred = output.topk(maxk, 1, True, True) - pred = pred.t() - # one-hot case - if target.ndimension() > 1: - target = target.max(1)[1] - - correct = pred.eq(target.view(1, -1).expand_as(pred)) - - res = [] - for k in topk: - correct_k = correct[:k].view(-1).float().sum(0) - res.append(correct_k.mul_(1.0 / batch_size)) - return res - -def reduce_tensor(tensor): - rt = tensor.clone() - dist.all_reduce(rt, op=dist.ReduceOp.SUM) - rt /= float(os.environ["WORLD_SIZE"]) - return rt - - -def reduce_metrics(metrics, distributed=False): - if distributed: - return {k: reduce_tensor(v).item() for k, v in metrics.items()} - return {k: v.item() for k, v in metrics.items()} + f.write(str(genotypes)) \ No newline at end of file diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py new file mode 100644 index 0000000000..eb31bf4945 --- /dev/null +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py @@ -0,0 +1,72 @@ +import os +import json +import torch +import torch.distributed as dist + +class CyclicIterator: + def __init__(self, loader, sampler, distributed): + self.loader = loader + self.sampler = sampler + self.epoch = 0 + self.distributed = distributed + self._next_epoch() + + def _next_epoch(self): + if self.distributed: + self.sampler.set_epoch(self.epoch) + self.iterator = iter(self.loader) + self.epoch += 1 + + def __len__(self): + return len(self.loader) + + def __iter__(self): + return self + + def __next__(self): + try: + return next(self.iterator) + except StopIteration: + self._next_epoch() + return next(self.iterator) + +class TorchTensorEncoder(json.JSONEncoder): + def default(self, o): # pylint: disable=method-hidden + if isinstance(o, torch.Tensor): + olist = o.tolist() + if "bool" not in o.type().lower() and all(map(lambda d: d == 0 or d == 1, olist)): + _logger.warning("Every element in %s is either 0 or 1. " + "You might consider convert it into bool.", olist) + return olist + return super().default(o) + +def accuracy(output, target, topk=(1,)): + """ Computes the precision@k for the specified values of k """ + maxk = max(topk) + batch_size = target.size(0) + + _, pred = output.topk(maxk, 1, True, True) + pred = pred.t() + # one-hot case + if target.ndimension() > 1: + target = target.max(1)[1] + + correct = pred.eq(target.view(1, -1).expand_as(pred)) + + res = [] + for k in topk: + correct_k = correct[:k].view(-1).float().sum(0) + res.append(correct_k.mul_(1.0 / batch_size)) + return res + +def reduce_tensor(tensor): + rt = tensor.clone() + dist.all_reduce(rt, op=dist.ReduceOp.SUM) + rt /= float(os.environ["WORLD_SIZE"]) + return rt + + +def reduce_metrics(metrics, distributed=False): + if distributed: + return {k: reduce_tensor(v).item() for k, v in metrics.items()} + return {k: v.item() for k, v in metrics.items()} From 022faa161d793d1e19cbb5be80cdaabc0bafc07c Mon Sep 17 00:00:00 2001 From: zhangyuge Date: Wed, 15 Jan 2020 17:22:06 +0800 Subject: [PATCH 05/21] fix code style --- src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py | 5 +++-- src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py | 14 ++++++++------ src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py | 13 +++++++------ 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py index dd76fa5632..a9a5ce0c7c 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py @@ -3,11 +3,12 @@ import torch -from apex.parallel import DistributedDataParallel # pylint: disable=import-error +from apex.parallel import DistributedDataParallel # pylint: disable=import-error from nni.nas.pytorch.darts import DartsMutator from nni.nas.pytorch.mutables import LayerChoice from nni.nas.pytorch.mutator import Mutator + class RegularizedDartsMutator(DartsMutator): def reset(self): raise ValueError("You should probably call `reset_with_loss`.") @@ -69,4 +70,4 @@ def __init__(self, model, parent_mutator): self.__dict__["parent_mutator"] = parent_mutator # avoid parameters to be included def sample_search(self): - return self.parent_mutator.sample_final() \ No newline at end of file + return self.parent_mutator.sample_final() diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py index 109cc35ca0..58c1e45a84 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py @@ -1,18 +1,20 @@ import json import os + +import apex # pylint: disable=import-error import torch import torch.nn as nn import torch.nn.functional as F -import apex # pylint: disable=import-error - -from apex.parallel import DistributedDataParallel # pylint: disable=import-error +from apex.parallel import DistributedDataParallel # pylint: disable=import-error from nni.nas.pytorch.cdarts import RegularizedDartsMutator, RegularizedMutatorParallel, DartsDiscreteMutator from nni.nas.pytorch.utils import AverageMeterGroup + from .utils import CyclicIterator, TorchTensorEncoder, accuracy, reduce_metrics PHASE_SMALL = "small" PHASE_LARGE = "large" + class InteractiveKLLoss(nn.Module): def __init__(self, temperature): super().__init__() @@ -55,7 +57,7 @@ def __init__(self, model_small, model_large, criterion, loaders, samplers, logge warmup_epochs : int The epochs to warmup the search network fix_head : bool - ``True`` if fixing the paramters of auxiliary heads, else unfix the paramters of auxiliary heads. + ``True`` if fixing the paramters of auxiliary heads, else unfix the paramters of auxiliary heads. epochs : int Number of epochs planned for training. steps_per_epoch : int @@ -206,7 +208,7 @@ def _joint_train(self, epoch): self.optimizer_alpha.zero_grad() self.optimizer_large.zero_grad() reg_decay = max(self.regular_coeff * (1 - float(epoch - self.warmup_epochs) / ( - (self.epochs - self.warmup_epochs) * self.regular_ratio)), 0) + (self.epochs - self.warmup_epochs) * self.regular_ratio)), 0) loss_regular = self.mutator_small.reset_with_loss() if loss_regular: loss_regular *= reg_decay @@ -262,4 +264,4 @@ def export(self, file, genotype_file): with open(file, "w") as f: json.dump(mutator_export, f, indent=2, sort_keys=True, cls=TorchTensorEncoder) with open(genotype_file, "w") as f: - f.write(str(genotypes)) \ No newline at end of file + f.write(str(genotypes)) diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py index eb31bf4945..b00f0744f0 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py @@ -1,8 +1,10 @@ -import os import json +import os + import torch import torch.distributed as dist + class CyclicIterator: def __init__(self, loader, sampler, distributed): self.loader = loader @@ -30,16 +32,14 @@ def __next__(self): self._next_epoch() return next(self.iterator) + class TorchTensorEncoder(json.JSONEncoder): def default(self, o): # pylint: disable=method-hidden if isinstance(o, torch.Tensor): - olist = o.tolist() - if "bool" not in o.type().lower() and all(map(lambda d: d == 0 or d == 1, olist)): - _logger.warning("Every element in %s is either 0 or 1. " - "You might consider convert it into bool.", olist) - return olist + return o.tolist() return super().default(o) + def accuracy(output, target, topk=(1,)): """ Computes the precision@k for the specified values of k """ maxk = max(topk) @@ -59,6 +59,7 @@ def accuracy(output, target, topk=(1,)): res.append(correct_k.mul_(1.0 / batch_size)) return res + def reduce_tensor(tensor): rt = tensor.clone() dist.all_reduce(rt, op=dist.ReduceOp.SUM) From 25778f550aab3d8d7e70742865a99d490448a7b8 Mon Sep 17 00:00:00 2001 From: zhangyuge Date: Wed, 15 Jan 2020 17:52:55 +0800 Subject: [PATCH 06/21] fix code style --- src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py index 58c1e45a84..e23c332ab2 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py @@ -1,10 +1,10 @@ import json import os -import apex # pylint: disable=import-error import torch import torch.nn as nn import torch.nn.functional as F +import apex # pylint: disable=import-error from apex.parallel import DistributedDataParallel # pylint: disable=import-error from nni.nas.pytorch.cdarts import RegularizedDartsMutator, RegularizedMutatorParallel, DartsDiscreteMutator from nni.nas.pytorch.utils import AverageMeterGroup @@ -208,7 +208,7 @@ def _joint_train(self, epoch): self.optimizer_alpha.zero_grad() self.optimizer_large.zero_grad() reg_decay = max(self.regular_coeff * (1 - float(epoch - self.warmup_epochs) / ( - (self.epochs - self.warmup_epochs) * self.regular_ratio)), 0) + (self.epochs - self.warmup_epochs) * self.regular_ratio)), 0) loss_regular = self.mutator_small.reset_with_loss() if loss_regular: loss_regular *= reg_decay From f9590506ddf1dc0a5a1a43740b5ca1718262a733 Mon Sep 17 00:00:00 2001 From: zhangyuge Date: Wed, 15 Jan 2020 18:20:21 +0800 Subject: [PATCH 07/21] disable wrong import order --- src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py | 6 +++--- src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py index a9a5ce0c7c..35460fa3d8 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py @@ -4,9 +4,9 @@ import torch from apex.parallel import DistributedDataParallel # pylint: disable=import-error -from nni.nas.pytorch.darts import DartsMutator -from nni.nas.pytorch.mutables import LayerChoice -from nni.nas.pytorch.mutator import Mutator +from nni.nas.pytorch.darts import DartsMutator # pylint: disable=wrong-import-order +from nni.nas.pytorch.mutables import LayerChoice # pylint: disable=wrong-import-order +from nni.nas.pytorch.mutator import Mutator # pylint: disable=wrong-import-order class RegularizedDartsMutator(DartsMutator): diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py index e23c332ab2..6dc5a31559 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py @@ -6,8 +6,8 @@ import torch.nn.functional as F import apex # pylint: disable=import-error from apex.parallel import DistributedDataParallel # pylint: disable=import-error -from nni.nas.pytorch.cdarts import RegularizedDartsMutator, RegularizedMutatorParallel, DartsDiscreteMutator -from nni.nas.pytorch.utils import AverageMeterGroup +from nni.nas.pytorch.cdarts import RegularizedDartsMutator, RegularizedMutatorParallel, DartsDiscreteMutator # pylint: disable=wrong-import-order +from nni.nas.pytorch.utils import AverageMeterGroup # pylint: disable=wrong-import-order from .utils import CyclicIterator, TorchTensorEncoder, accuracy, reduce_metrics From 2e96bdfff5bb8aca836842ab8a94f5d7749e7ac7 Mon Sep 17 00:00:00 2001 From: Yuge Zhang Date: Wed, 15 Jan 2020 19:36:15 +0800 Subject: [PATCH 08/21] fix syntax issues --- examples/nas/cdarts/datasets/imagenet.py | 2 ++ examples/nas/cdarts/ops.py | 1 - examples/nas/cdarts/retrain.py | 4 +-- examples/nas/cdarts/run_retrain_cifar.sh | 0 examples/nas/cdarts/run_search_cifar.sh | 0 examples/nas/cdarts/utils.py | 46 +----------------------- 6 files changed, 5 insertions(+), 48 deletions(-) mode change 100644 => 100755 examples/nas/cdarts/run_retrain_cifar.sh mode change 100644 => 100755 examples/nas/cdarts/run_search_cifar.sh diff --git a/examples/nas/cdarts/datasets/imagenet.py b/examples/nas/cdarts/datasets/imagenet.py index c803a76755..29b880a36b 100644 --- a/examples/nas/cdarts/datasets/imagenet.py +++ b/examples/nas/cdarts/datasets/imagenet.py @@ -1,3 +1,5 @@ +import os + import numpy as np import torch import torchvision.datasets as dset diff --git a/examples/nas/cdarts/ops.py b/examples/nas/cdarts/ops.py index 403a2b6b8a..9d2f6b20ad 100644 --- a/examples/nas/cdarts/ops.py +++ b/examples/nas/cdarts/ops.py @@ -5,7 +5,6 @@ import torch.nn as nn OPS = { - 'none': lambda C, stride, affine: Zero(stride), 'avg_pool_3x3': lambda C, stride, affine: PoolWithoutBN('avg', C, 3, stride, 1, affine=affine), 'max_pool_3x3': lambda C, stride, affine: PoolWithoutBN('max', C, 3, stride, 1, affine=affine), 'skip_connect': lambda C, stride, affine: nn.Identity() if stride == 1 else FactorizedReduce(C, C, affine=affine), diff --git a/examples/nas/cdarts/retrain.py b/examples/nas/cdarts/retrain.py index 453c3f8ae9..4b4eb1b780 100644 --- a/examples/nas/cdarts/retrain.py +++ b/examples/nas/cdarts/retrain.py @@ -7,10 +7,10 @@ import torch import torch.nn as nn +import apex # pylint: disable=import-error import datasets import utils -import apex # pylint: disable=import-error -from apex.parallel import DistributedDataParallel # pylint: disable=import-error +from apex.parallel import DistributedDataParallel # pylint: disable=import-error from config import RetrainConfig from datasets.cifar import get_augment_datasets from model import Model diff --git a/examples/nas/cdarts/run_retrain_cifar.sh b/examples/nas/cdarts/run_retrain_cifar.sh old mode 100644 new mode 100755 diff --git a/examples/nas/cdarts/run_search_cifar.sh b/examples/nas/cdarts/run_search_cifar.sh old mode 100644 new mode 100755 diff --git a/examples/nas/cdarts/utils.py b/examples/nas/cdarts/utils.py index d0b9d48a80..4ed223c060 100644 --- a/examples/nas/cdarts/utils.py +++ b/examples/nas/cdarts/utils.py @@ -11,6 +11,7 @@ from genotypes import Genotype from ops import PRIMITIVES +from nni.nas.pytorch.cdarts.utils import * def get_logger(file_path): @@ -73,51 +74,6 @@ def forward(self, inputs, targets): loss = (-targets * log_probs).mean(0).sum() return loss - -class TorchTensorEncoder(json.JSONEncoder): - def default(self, o): # pylint: disable=method-hidden - if isinstance(o, torch.Tensor): - olist = o.tolist() - if "bool" not in o.type().lower() and all(map(lambda d: d == 0 or d == 1, olist)): - _logger.warning("Every element in %s is either 0 or 1. " - "You might consider convert it into bool.", olist) - return olist - return super().default(o) - - -def accuracy(output, target, topk=(1,)): - """ Computes the precision@k for the specified values of k """ - maxk = max(topk) - batch_size = target.size(0) - - _, pred = output.topk(maxk, 1, True, True) - pred = pred.t() - # one-hot case - if target.ndimension() > 1: - target = target.max(1)[1] - - correct = pred.eq(target.view(1, -1).expand_as(pred)) - - res = [] - for k in topk: - correct_k = correct[:k].view(-1).float().sum(0) - res.append(correct_k.mul_(1.0 / batch_size)) - return res - - -def reduce_tensor(tensor): - rt = tensor.clone() - dist.all_reduce(rt, op=dist.ReduceOp.SUM) - rt /= float(os.environ["WORLD_SIZE"]) - return rt - - -def reduce_metrics(metrics, distributed=False): - if distributed: - return {k: reduce_tensor(v).item() for k, v in metrics.items()} - return {k: v.item() for k, v in metrics.items()} - - def parse_results(results, n_nodes): concat = range(2, 2 + n_nodes) normal_gene = [] From 386a4a98b3e6e9d4fd40f79dc5255bbdeed2fe7e Mon Sep 17 00:00:00 2001 From: Yuge Zhang Date: Wed, 15 Jan 2020 19:56:59 +0800 Subject: [PATCH 09/21] update nas docs --- docs/en_US/NAS/CDARTS.md | 20 +++++++++++++ docs/en_US/nas.rst | 1 + .../pynni/nni/nas/pytorch/cdarts/mutator.py | 28 +++++++++++++++++++ .../pynni/nni/nas/pytorch/cdarts/trainer.py | 1 + 4 files changed, 50 insertions(+) diff --git a/docs/en_US/NAS/CDARTS.md b/docs/en_US/NAS/CDARTS.md index 9c88d13b81..1c2a758f1e 100644 --- a/docs/en_US/NAS/CDARTS.md +++ b/docs/en_US/NAS/CDARTS.md @@ -5,6 +5,7 @@ CDARTS builds a cyclic feedback mechanism between the search and evaluation netw ## Reproduction Results This is CDARTS based on the NNI platform, which currently supports CIFAR10 search and retrain. ImageNet search and retrain should also be supported, and we provide corresponding interfaces. Our reproduced results on NNI are slightly lower than the paper, but much higher than the original DARTS. Here we show the results of three independent experiments on CIFAR10. + | Runs | Paper | NNI | | ---- |:-------------:| :-----:| | 1 | 97.52 | 97.44 | @@ -32,3 +33,22 @@ bash run_search_cifar.sh # train the best architecture. bash run_retrain_cifar.sh ``` + +## Reference + +### PyTorch + +```eval_rst +.. autoclass:: nni.nas.pytorch.cdarts.CdartsTrainer + :members: + + .. automethod:: __init__ + +.. autoclass:: nni.nas.pytorch.cdarts.RegularizedDartsMutator + :members: + +.. autoclass:: nni.nas.pytorch.cdarts.DartsDiscreteMutator + :members: + + .. automethod:: __init__ +``` diff --git a/docs/en_US/nas.rst b/docs/en_US/nas.rst index 32c235b3bb..a5bd8f6b8f 100644 --- a/docs/en_US/nas.rst +++ b/docs/en_US/nas.rst @@ -24,3 +24,4 @@ For details, please refer to the following tutorials: DARTS P-DARTS SPOS + CDARTS diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py index 35460fa3d8..2a669d06ba 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py @@ -10,10 +10,24 @@ class RegularizedDartsMutator(DartsMutator): + """ + DartsMutator with choice cut and regularization on some of the choices. + """ + def reset(self): raise ValueError("You should probably call `reset_with_loss`.") def cut_choices(self, cut_num=2): + """ + Cut the choices with the smallest weights. + ``cut_num`` should be the accumulative number of cutting, e.g., if first time cutting + is 2, the second time should be 4 to cut another two. + + Parameters + ---------- + cut_num : int + Number of choices to cut, so far. + """ # `cut_choices` is implemented but not used for mutable in self.mutables: if isinstance(mutable, LayerChoice): @@ -23,6 +37,9 @@ def cut_choices(self, cut_num=2): self.choices[mutable.key][i] = -float("inf") def reset_with_loss(self): + """ + Resample and return loss. If loss is 0, to avoid device issue, it will return ``None``. + """ self._cache, reg_loss = self.sample_search() return reg_loss @@ -66,6 +83,17 @@ def export(self, logger): class DartsDiscreteMutator(Mutator): def __init__(self, model, parent_mutator): + """ + Initialization. + + Parameters + ---------- + model : nn.Module + The model to apply the mutator. + parent_mutator : Mutator + The mutator that is used to call ``sample_final()`` method to get the architecture + for training. + """ super().__init__(model) self.__dict__["parent_mutator"] = parent_mutator # avoid parameters to be included diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py index 6dc5a31559..8859da824b 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py @@ -36,6 +36,7 @@ def __init__(self, model_small, model_large, criterion, loaders, samplers, logge nasnet_lr=0.2, local_rank=0, share_module=True): """ Initialize a CdartsTrainer. + Parameters ---------- model_small : nn.Module From 457be736aed1f628bfc7bc8c8b3c6e930d57c9a1 Mon Sep 17 00:00:00 2001 From: Yuge Zhang Date: Thu, 16 Jan 2020 09:13:54 +0800 Subject: [PATCH 10/21] remove trailing whitespace in trainer --- src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py index 8859da824b..e23e19e255 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py @@ -36,7 +36,7 @@ def __init__(self, model_small, model_large, criterion, loaders, samplers, logge nasnet_lr=0.2, local_rank=0, share_module=True): """ Initialize a CdartsTrainer. - + Parameters ---------- model_small : nn.Module From 2320cdd1842c6d99cf07b12ef7147815fb962cb4 Mon Sep 17 00:00:00 2001 From: Yuge Zhang Date: Thu, 16 Jan 2020 09:44:52 +0800 Subject: [PATCH 11/21] mock apex import --- docs/en_US/conf.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/en_US/conf.py b/docs/en_US/conf.py index 60b2afe782..a8f06f5fc1 100644 --- a/docs/en_US/conf.py +++ b/docs/en_US/conf.py @@ -47,6 +47,9 @@ 'sphinx.ext.napoleon', ] +# Add mock modules +autodoc_mock_imports = ['apex'] + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] From 2dcab31b5fbe8cc272ef456389d1e40864a950bf Mon Sep 17 00:00:00 2001 From: Yuge Zhang Date: Thu, 16 Jan 2020 11:32:06 +0800 Subject: [PATCH 12/21] elaborate documentation --- docs/en_US/NAS/CDARTS.md | 7 ++++ .../pynni/nni/nas/pytorch/cdarts/mutator.py | 41 +++++++++++++++++-- .../pynni/nni/nas/pytorch/cdarts/trainer.py | 3 +- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/docs/en_US/NAS/CDARTS.md b/docs/en_US/NAS/CDARTS.md index 1c2a758f1e..46f8cff015 100644 --- a/docs/en_US/NAS/CDARTS.md +++ b/docs/en_US/NAS/CDARTS.md @@ -1,9 +1,13 @@ # CDARTS ## Introduction + CDARTS builds a cyclic feedback mechanism between the search and evaluation networks. First, the search network generates an initial topology for evaluation, so that the weights of the evaluation network can be optimized. Second, the architecture topology in the search network is further optimized by the label supervision in classification, as well as the regularization from the evaluation network through feature distillation. Repeating the above cycle results in a joint optimization of the search and evaluation networks, and thus enables the evolution of the topology to fit the final evaluation network. +In implementation of `CdartsTrainer`, it first instantiates two models and two mutators (one for each). The first model is the so-called "search network", which is mutated with a `RegularizedDartsMutator` -- a mutator with subtle differences with `DartsMutator`. The second model is the "evaluation network", which is mutated with a discrete mutator that leverages the previous search network mutator, to sample a single path each time. Trainers train models and mutators alternatively. Users to refer to [References](#Reference) if they are interested in more details on these trainers and mutators. + ## Reproduction Results + This is CDARTS based on the NNI platform, which currently supports CIFAR10 search and retrain. ImageNet search and retrain should also be supported, and we provide corresponding interfaces. Our reproduced results on NNI are slightly lower than the paper, but much higher than the original DARTS. Here we show the results of three independent experiments on CIFAR10. | Runs | Paper | NNI | @@ -51,4 +55,7 @@ bash run_retrain_cifar.sh :members: .. automethod:: __init__ + +.. autoclass:: nni.nas.pytorch.cdarts.RegularizedMutatorParallel + :members: ``` diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py index 2a669d06ba..8cb6e82747 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py @@ -11,10 +11,20 @@ class RegularizedDartsMutator(DartsMutator): """ - DartsMutator with choice cut and regularization on some of the choices. + This is :class:`~nni.nas.pytorch.darts.DartsMutator` basically, with two differences. + + 1. Choices can be cut (bypassed). This is done by ``cut_choices``. Cutted choices will not be used in + forward pass and thus consumes no memory. + + 2. Regularization on choices, to prevent the mutator from overfitting on some choices. """ def reset(self): + """ + Warnings + -------- + Renamed :func:`~reset_with_loss` to return regularization loss on reset. + """ raise ValueError("You should probably call `reset_with_loss`.") def cut_choices(self, cut_num=2): @@ -27,8 +37,13 @@ def cut_choices(self, cut_num=2): ---------- cut_num : int Number of choices to cut, so far. + + Warnings + -------- + Though the parameters are set to :math:`-\infty` to be bypassed, they will still receive gradient of 0, + which introduced ``nan`` problem when calling ``optimizer.step()``. To solve this issue, """ - # `cut_choices` is implemented but not used + # `cut_choices` is implemented but not used in current implementation of CdartsTrainer for mutable in self.mutables: if isinstance(mutable, LayerChoice): _, idx = torch.topk(-self.choices[mutable.key], cut_num) @@ -39,6 +54,10 @@ def cut_choices(self, cut_num=2): def reset_with_loss(self): """ Resample and return loss. If loss is 0, to avoid device issue, it will return ``None``. + + Currently loss penalty are proportional to the L1-norm of parameters corresponding + to modules if their type name contains certain substrings. These substrings include: ``poolwithoutbn``, + ``identity``, ``dilconv``. """ self._cache, reg_loss = self.sample_search() return reg_loss @@ -60,14 +79,28 @@ def need_reg(choice): return result, None return result, sum(loss) - def export(self, logger): + def export(self, logger=None): + """ + Export an architecture with logger. Genotype will be printed with logger. + + Returns + ------- + dict + A mapping from mutable keys to decisions. + """ result = self.sample_final() - if hasattr(self.model, "plot_genotype"): + if hasattr(self.model, "plot_genotype") and logger is not None: genotypes = self.model.plot_genotype(result, logger) return result, genotypes class RegularizedMutatorParallel(DistributedDataParallel): + """ + Parallelize :class:`~RegularizedDartsMutator`. + + This makes ``reset_with_loss`` method parallelized, also allowing ``cut_choies`` and + ``export`` to be easily accessible (instead of using ``.module.``). + """ def reset_with_loss(self): result = self.module.reset_with_loss() self.callback_queued = False diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py index e23e19e255..00fe8cf808 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py @@ -1,4 +1,5 @@ import json +import logging import os import torch @@ -49,7 +50,7 @@ def __init__(self, model_small, model_large, criterion, loaders, samplers, logge List of training dataset and test dataset. Will be split for training weights and architecture weights. samplers : list of Dateset Samplers List of training dataset and test dataset samplers. - logger : callable + logger : logging.Logger The logging object. It receives the contents for logging. regular_coeff : float The coefficient of regular loss. From 36882f06eb03e0b6042fdda7fd7aff543470fb7f Mon Sep 17 00:00:00 2001 From: Yuge Zhang Date: Thu, 16 Jan 2020 11:32:53 +0800 Subject: [PATCH 13/21] update --- docs/en_US/NAS/CDARTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en_US/NAS/CDARTS.md b/docs/en_US/NAS/CDARTS.md index 46f8cff015..574eca01fc 100644 --- a/docs/en_US/NAS/CDARTS.md +++ b/docs/en_US/NAS/CDARTS.md @@ -4,7 +4,7 @@ CDARTS builds a cyclic feedback mechanism between the search and evaluation networks. First, the search network generates an initial topology for evaluation, so that the weights of the evaluation network can be optimized. Second, the architecture topology in the search network is further optimized by the label supervision in classification, as well as the regularization from the evaluation network through feature distillation. Repeating the above cycle results in a joint optimization of the search and evaluation networks, and thus enables the evolution of the topology to fit the final evaluation network. -In implementation of `CdartsTrainer`, it first instantiates two models and two mutators (one for each). The first model is the so-called "search network", which is mutated with a `RegularizedDartsMutator` -- a mutator with subtle differences with `DartsMutator`. The second model is the "evaluation network", which is mutated with a discrete mutator that leverages the previous search network mutator, to sample a single path each time. Trainers train models and mutators alternatively. Users to refer to [References](#Reference) if they are interested in more details on these trainers and mutators. +In implementation of `CdartsTrainer`, it first instantiates two models and two mutators (one for each). The first model is the so-called "search network", which is mutated with a `RegularizedDartsMutator` -- a mutator with subtle differences with `DartsMutator`. The second model is the "evaluation network", which is mutated with a discrete mutator that leverages the previous search network mutator, to sample a single path each time. Trainers train models and mutators alternatively. Users to refer to [references](#reference) if they are interested in more details on these trainers and mutators. ## Reproduction Results From 19eb69e9a96c0cb67aa1e8796c6f33f7073852dc Mon Sep 17 00:00:00 2001 From: Yuge Zhang Date: Thu, 16 Jan 2020 11:35:59 +0800 Subject: [PATCH 14/21] update docs --- src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py index 8cb6e82747..fb7e12e03e 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py @@ -124,8 +124,7 @@ def __init__(self, model, parent_mutator): model : nn.Module The model to apply the mutator. parent_mutator : Mutator - The mutator that is used to call ``sample_final()`` method to get the architecture - for training. + The mutator that provides ``sample_final`` method, that will be called to get the architecture. """ super().__init__(model) self.__dict__["parent_mutator"] = parent_mutator # avoid parameters to be included From 46c229dfd147e3d0502df3e3b08a37fe78b8450a Mon Sep 17 00:00:00 2001 From: Yuge Zhang Date: Thu, 16 Jan 2020 11:44:16 +0800 Subject: [PATCH 15/21] fix crossref --- src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py index fb7e12e03e..9a33d27fca 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py @@ -98,18 +98,28 @@ class RegularizedMutatorParallel(DistributedDataParallel): """ Parallelize :class:`~RegularizedDartsMutator`. - This makes ``reset_with_loss`` method parallelized, also allowing ``cut_choies`` and - ``export`` to be easily accessible (instead of using ``.module.``). + This makes :func:`~RegularizedDartsMutator.reset_with_loss` method parallelized, + also allowing :func:`~RegularizedDartsMutator.cut_choices` and :func:`~RegularizedDartsMutator.export` + to be easily accessible. """ def reset_with_loss(self): + """ + Parallelized :func:`~RegularizedDartsMutator.reset_with_loss`. + """ result = self.module.reset_with_loss() self.callback_queued = False return result def cut_choices(self, *args, **kwargs): + """ + Parallelized :func:`~RegularizedDartsMutator.cut_choices`. + """ self.module.cut_choices(*args, **kwargs) def export(self, logger): + """ + Parallelized :func:`~RegularizedDartsMutator.export`. + """ return self.module.export(logger) From bbb8873267af1ce163491aac1c0a7c26077c7026 Mon Sep 17 00:00:00 2001 From: Yuge Zhang Date: Thu, 16 Jan 2020 11:45:00 +0800 Subject: [PATCH 16/21] fix typo --- docs/en_US/NAS/CDARTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en_US/NAS/CDARTS.md b/docs/en_US/NAS/CDARTS.md index 574eca01fc..4242040f08 100644 --- a/docs/en_US/NAS/CDARTS.md +++ b/docs/en_US/NAS/CDARTS.md @@ -4,7 +4,7 @@ CDARTS builds a cyclic feedback mechanism between the search and evaluation networks. First, the search network generates an initial topology for evaluation, so that the weights of the evaluation network can be optimized. Second, the architecture topology in the search network is further optimized by the label supervision in classification, as well as the regularization from the evaluation network through feature distillation. Repeating the above cycle results in a joint optimization of the search and evaluation networks, and thus enables the evolution of the topology to fit the final evaluation network. -In implementation of `CdartsTrainer`, it first instantiates two models and two mutators (one for each). The first model is the so-called "search network", which is mutated with a `RegularizedDartsMutator` -- a mutator with subtle differences with `DartsMutator`. The second model is the "evaluation network", which is mutated with a discrete mutator that leverages the previous search network mutator, to sample a single path each time. Trainers train models and mutators alternatively. Users to refer to [references](#reference) if they are interested in more details on these trainers and mutators. +In implementation of `CdartsTrainer`, it first instantiates two models and two mutators (one for each). The first model is the so-called "search network", which is mutated with a `RegularizedDartsMutator` -- a mutator with subtle differences with `DartsMutator`. The second model is the "evaluation network", which is mutated with a discrete mutator that leverages the previous search network mutator, to sample a single path each time. Trainers train models and mutators alternatively. Users can refer to [references](#reference) if they are interested in more details on these trainers and mutators. ## Reproduction Results From 386110956571afba19d5f0b30f9a2a75e64d63e4 Mon Sep 17 00:00:00 2001 From: Yuge Zhang Date: Thu, 16 Jan 2020 11:59:06 +0800 Subject: [PATCH 17/21] update mutator and trainer --- src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py | 4 +++- src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py | 17 ++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py index 9a33d27fca..a83d3d24da 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py @@ -124,7 +124,9 @@ def export(self, logger): class DartsDiscreteMutator(Mutator): - + """ + A mutator that applies the final sampling result of a parent mutator on another model to train. + """ def __init__(self, model, parent_mutator): """ Initialization. diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py index 00fe8cf808..43d3cee5d3 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py @@ -29,7 +29,7 @@ def forward(self, student, teacher): class CdartsTrainer(object): - def __init__(self, model_small, model_large, criterion, loaders, samplers, logger, + def __init__(self, model_small, model_large, criterion, loaders, samplers, logger=None, regular_coeff=5, regular_ratio=0.2, warmup_epochs=2, fix_head=True, epochs=32, steps_per_epoch=None, loss_alpha=2, loss_T=2, distributed=True, log_frequency=10, grad_clip=5.0, interactive_type='kl', output_path='./outputs', @@ -45,13 +45,14 @@ def __init__(self, model_small, model_large, criterion, loaders, samplers, logge model_large : nn.Module PyTorch model to be trained. This is the evaluation network of CDARTS. criterion : callable - Receives logits and ground truth label, return a loss tensor. - loaders : list - List of training dataset and test dataset. Will be split for training weights and architecture weights. - samplers : list of Dateset Samplers - List of training dataset and test dataset samplers. + Receives logits and ground truth label, return a loss tensor, e.g., ``nn.CrossEntropyLoss()``. + loaders : list of torch.utils.data.DataLoader + List of train data and valid data loaders, for training weights and architecture weights respectively. + samplers : list of torch.utils.data.Sampler + List of train data and valid data samplers. This can be PyTorch standard samplers if not distributed. + In distributed mode, sampler needs to have ``set_epoch`` method. Refer to data utils in CDARTS example for details. logger : logging.Logger - The logging object. It receives the contents for logging. + The logger for logging. Will use nni logger by default (if logger is ``None``). regular_coeff : float The coefficient of regular loss. regular_ratio : float @@ -95,6 +96,8 @@ def __init__(self, model_small, model_large, criterion, loaders, samplers, logge share_module : bool ``True`` if sharing the stem and auxiliary heads, else not sharing these modules. """ + if logger is None: + logger = logging.getLogger(__name__) train_loader, valid_loader = loaders train_sampler, valid_sampler = samplers self.train_loader = CyclicIterator(train_loader, train_sampler, distributed) From cf0471f58de0e51e75f1f11147eb00e7dc5652a9 Mon Sep 17 00:00:00 2001 From: Yuge Zhang Date: Thu, 16 Jan 2020 12:24:13 +0800 Subject: [PATCH 18/21] remove trailing whitespace --- src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py index a83d3d24da..6010057828 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/mutator.py @@ -41,7 +41,8 @@ def cut_choices(self, cut_num=2): Warnings -------- Though the parameters are set to :math:`-\infty` to be bypassed, they will still receive gradient of 0, - which introduced ``nan`` problem when calling ``optimizer.step()``. To solve this issue, + which introduced ``nan`` problem when calling ``optimizer.step()``. To solve this issue, a simple way is to + reset nan to :math:`-\infty` each time after the parameters are updated. """ # `cut_choices` is implemented but not used in current implementation of CdartsTrainer for mutable in self.mutables: From 7c87a7f268f6c83072166ed4a12008c05cf4d9fe Mon Sep 17 00:00:00 2001 From: Yuge Zhang Date: Thu, 16 Jan 2020 13:26:24 +0800 Subject: [PATCH 19/21] fix dosctring format --- examples/nas/cdarts/datasets/data_utils.py | 35 +++++++++++----------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/examples/nas/cdarts/datasets/data_utils.py b/examples/nas/cdarts/datasets/data_utils.py index 5989d274f9..f567d61a68 100644 --- a/examples/nas/cdarts/datasets/data_utils.py +++ b/examples/nas/cdarts/datasets/data_utils.py @@ -9,25 +9,32 @@ class SubsetDistributedSampler(Sampler): - """Sampler that restricts data loading to a subset of the dataset. + """ + Sampler that restricts data loading to a subset of the dataset. It is especially useful in conjunction with :class:`torch.nn.parallel.DistributedDataParallel`. In such case, each process can pass a DistributedSampler instance as a DataLoader sampler, and load a subset of the original dataset that is exclusive to it. - .. note:: - Dataset is assumed to be of constant size. - - Arguments: - dataset: Dataset used for sampling. - num_replicas (optional): Number of processes participating in - distributed training. - rank (optional): Rank of the current process within num_replicas. - shuffle (optional): If true (default), sampler will shuffle the indices + Dataset is assumed to be of constant size. """ def __init__(self, dataset, indices, num_replicas=None, rank=None, shuffle=True): + """ + Initialization. + + Parameters + ---------- + dataset : torch.utils.data.Dataset + Dataset used for sampling. + num_replicas : int + Number of processes participating in distributed training. Default: World size. + rank : int + Rank of the current process within num_replicas. Default: Current rank. + shuffle : bool + If true (default), sampler will shuffle the indices. + """ if num_replicas is None: if not dist.is_available(): raise RuntimeError("Requires distributed package to be available") @@ -79,10 +86,6 @@ def __init__(self, loader): self.stream = torch.cuda.Stream() self.mean = torch.tensor([0.485 * 255, 0.456 * 255, 0.406 * 255]).cuda().view(1, 3, 1, 1) self.std = torch.tensor([0.229 * 255, 0.224 * 255, 0.225 * 255]).cuda().view(1, 3, 1, 1) - # With Amp, it isn't necessary to manually convert data to half. - # if args.fp16: - # self.mean = self.mean.half() - # self.std = self.std.half() self.preload() def preload(self): @@ -95,10 +98,6 @@ def preload(self): with torch.cuda.stream(self.stream): self.next_input = self.next_input.cuda(non_blocking=True) self.next_target = self.next_target.cuda(non_blocking=True) - # With Amp, it isn't necessary to manually convert data to half. - # if args.fp16: - # self.next_input = self.next_input.half() - # else: self.next_input = self.next_input.float() self.next_input = self.next_input.sub_(self.mean).div_(self.std) From 1a167ba0357688fa7e64b9d15dc4c6e55541155e Mon Sep 17 00:00:00 2001 From: Yuge Zhang Date: Thu, 16 Jan 2020 13:30:23 +0800 Subject: [PATCH 20/21] add license --- examples/nas/cdarts/aux_head.py | 3 +++ examples/nas/cdarts/config.py | 4 +++- examples/nas/cdarts/datasets/cifar.py | 3 +++ examples/nas/cdarts/datasets/data_utils.py | 3 +++ examples/nas/cdarts/datasets/imagenet.py | 3 +++ examples/nas/cdarts/genotypes.py | 11 +++++++---- examples/nas/cdarts/retrain.py | 3 +++ examples/nas/cdarts/utils.py | 3 +++ src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py | 3 +++ src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py | 3 +++ 10 files changed, 34 insertions(+), 5 deletions(-) diff --git a/examples/nas/cdarts/aux_head.py b/examples/nas/cdarts/aux_head.py index 352db6a7df..9a67d09fec 100644 --- a/examples/nas/cdarts/aux_head.py +++ b/examples/nas/cdarts/aux_head.py @@ -1,3 +1,6 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + import torch.nn as nn diff --git a/examples/nas/cdarts/config.py b/examples/nas/cdarts/config.py index 2894edf7a8..f0200f39cd 100644 --- a/examples/nas/cdarts/config.py +++ b/examples/nas/cdarts/config.py @@ -1,4 +1,6 @@ -""" Config class for search/retrain """ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + import argparse from functools import partial diff --git a/examples/nas/cdarts/datasets/cifar.py b/examples/nas/cdarts/datasets/cifar.py index ea9a03520c..493335f151 100644 --- a/examples/nas/cdarts/datasets/cifar.py +++ b/examples/nas/cdarts/datasets/cifar.py @@ -1,3 +1,6 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + import numpy as np import torch import torchvision.datasets as dset diff --git a/examples/nas/cdarts/datasets/data_utils.py b/examples/nas/cdarts/datasets/data_utils.py index f567d61a68..096b5a1fa7 100644 --- a/examples/nas/cdarts/datasets/data_utils.py +++ b/examples/nas/cdarts/datasets/data_utils.py @@ -1,3 +1,6 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + import math import random diff --git a/examples/nas/cdarts/datasets/imagenet.py b/examples/nas/cdarts/datasets/imagenet.py index 29b880a36b..3bba3d552e 100644 --- a/examples/nas/cdarts/datasets/imagenet.py +++ b/examples/nas/cdarts/datasets/imagenet.py @@ -1,3 +1,6 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + import os import numpy as np diff --git a/examples/nas/cdarts/genotypes.py b/examples/nas/cdarts/genotypes.py index 7619cfb791..0cc4d3fa63 100644 --- a/examples/nas/cdarts/genotypes.py +++ b/examples/nas/cdarts/genotypes.py @@ -1,7 +1,10 @@ -""" Genotypes - - Genotype: normal/reduce gene + normal/reduce cell output connection (concat) - - gene: discrete ops information (w/o output connection) - - dag: real ops (can be mixed or discrete, but Genotype has only discrete information itself) +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + +""" +- Genotype: normal/reduce gene + normal/reduce cell output connection (concat) +- gene: discrete ops information (w/o output connection) +- dag: real ops (can be mixed or discrete, but Genotype has only discrete information itself) """ from collections import namedtuple diff --git a/examples/nas/cdarts/retrain.py b/examples/nas/cdarts/retrain.py index 4b4eb1b780..4cd320d58c 100644 --- a/examples/nas/cdarts/retrain.py +++ b/examples/nas/cdarts/retrain.py @@ -1,3 +1,6 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + import json import logging import os diff --git a/examples/nas/cdarts/utils.py b/examples/nas/cdarts/utils.py index 4ed223c060..11febc0beb 100644 --- a/examples/nas/cdarts/utils.py +++ b/examples/nas/cdarts/utils.py @@ -1,3 +1,6 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + import json import logging import os diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py index 43d3cee5d3..e050986b4c 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/trainer.py @@ -1,3 +1,6 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + import json import logging import os diff --git a/src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py b/src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py index b00f0744f0..780f6fdc0e 100644 --- a/src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py +++ b/src/sdk/pynni/nni/nas/pytorch/cdarts/utils.py @@ -1,3 +1,6 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + import json import os From 5d3970572621553bdbd95c5cebe1527e8fdea9ce Mon Sep 17 00:00:00 2001 From: Yuge Zhang Date: Thu, 16 Jan 2020 13:33:05 +0800 Subject: [PATCH 21/21] resolve comments in ops.py --- examples/nas/cdarts/ops.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/nas/cdarts/ops.py b/examples/nas/cdarts/ops.py index 9d2f6b20ad..285dc2998b 100644 --- a/examples/nas/cdarts/ops.py +++ b/examples/nas/cdarts/ops.py @@ -31,6 +31,7 @@ class DropPath(nn.Module): def __init__(self, p=0.): """ Drop path with probability. + Parameters ---------- p : float @@ -61,7 +62,7 @@ def __init__(self, pool_type, C, kernel_size, stride, padding, affine=True): elif pool_type.lower() == 'avg': self.pool = nn.AvgPool2d(kernel_size, stride, padding, count_include_pad=False) else: - raise ValueError() + raise NotImplementedError("Pool doesn't support pooling type other than max and avg.") def forward(self, x): out = self.pool(x)