From 963b3ee3acf94fc211e6faafe4853673f3394d81 Mon Sep 17 00:00:00 2001 From: Seth Weidman Date: Wed, 9 Oct 2019 06:52:52 -0700 Subject: [PATCH 1/7] Add initial ImageNet dataloading code --- .../static_quantization_tutorial.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 advanced_source/static_quantization_tutorial.py diff --git a/advanced_source/static_quantization_tutorial.py b/advanced_source/static_quantization_tutorial.py new file mode 100644 index 00000000000..b5ffe38e862 --- /dev/null +++ b/advanced_source/static_quantization_tutorial.py @@ -0,0 +1,18 @@ +from torchvision.datasets import ImageNet +import torchvision.transforms as transforms + +normalize = transforms.Normalize( + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]) + +val_data = ImageNet('~/.data/', + split='val', + download=True, + transform=transforms.Compose([ + transforms.ToTensor(), + normalize] + ) +) + +print(val_data) +print(type(val_data)) From 41e26c0ed9cd0ee6245f6a215e94402e2ff89d90 Mon Sep 17 00:00:00 2001 From: Seth Weidman Date: Wed, 9 Oct 2019 21:12:51 -0700 Subject: [PATCH 2/7] First draft of static quantization tutorial --- Makefile | 4 + _static/img/qat.png | Bin 0 -> 173857 bytes .../static_quantization_tutorial.py | 631 +++++++++++++++++- index.rst | 21 + 4 files changed, 642 insertions(+), 14 deletions(-) create mode 100644 _static/img/qat.png diff --git a/Makefile b/Makefile index 6461fbb4243..6bb45025d61 100644 --- a/Makefile +++ b/Makefile @@ -81,6 +81,10 @@ download: wget -N https://s3.amazonaws.com/pytorch-tutorial-assets/lenet_mnist_model.pth -P $(DATADIR) cp $(DATADIR)/lenet_mnist_model.pth ./beginner_source/data/lenet_mnist_model.pth + # Download dataset for advanced_source/static_quantization_tutorial.py + wget -N https://s3.amazonaws.com/pytorch-tutorial-assets/imagenet_1k.zip -P $(DATADIR) + unzip -q -o $(DATADIR)/imagenet_1k.zip -d advanced_source/data/ + docs: make download make html diff --git a/_static/img/qat.png b/_static/img/qat.png new file mode 100644 index 0000000000000000000000000000000000000000..e8ca311745c629d7aa0fc055cd2f21a820f5d4b3 GIT binary patch literal 173857 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:eos&{V++!~RSD39}0WFhZU4 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

5drF`mB=4LY@=s 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 literal 0 HcmV?d00001 diff --git a/advanced_source/static_quantization_tutorial.py b/advanced_source/static_quantization_tutorial.py index b5ffe38e862..f958b77747f 100644 --- a/advanced_source/static_quantization_tutorial.py +++ b/advanced_source/static_quantization_tutorial.py @@ -1,18 +1,621 @@ -from torchvision.datasets import ImageNet +""" +(experimental) Static Quantization with Eager Mode in PyTorch +========================================================= + +**Author**: `raghuraman krishnamoorthi `_ + +**Edited by**: `Seth Weidman `_ + +This tutorial shows how to do post-training static quantization, as well as illustrating +two more advanced techniques - per-channel quantization and quantization-aware training - +to further improve the model's accuracy. + +By the end of this tutorial, you will see how quantization in PyTorch can result in +significant decreases in model size while increasing speed. Furthermore, you'll see how +to easily apply some advanced quantization techniques shown +`here `_ so that your quantized models take much less +of an accuracy hit than they would otherwise. + +Warning: we use a lot of boilerplate code from other PyTorch repos to, for example, +define the ``MobileNetV2`` model archtecture, define data loaders, and so on. We of course +encourage you to read it; but if you want to get to the quantization features, feel free +to skip to the "4. Post-training static quantization" section. + +We'll start by doing the necessary imports: +""" +import numpy as np +import torch +import torch.nn as nn +import torchvision +from torch.utils.data import DataLoader +from torchvision import datasets import torchvision.transforms as transforms +import os +import time +import sys +import torch.quantization -normalize = transforms.Normalize( - mean=[0.485, 0.456, 0.406], - std=[0.229, 0.224, 0.225]) - -val_data = ImageNet('~/.data/', - split='val', - download=True, - transform=transforms.Compose([ - transforms.ToTensor(), - normalize] - ) +# # Setup warnings +import warnings +warnings.filterwarnings( + action='ignore', + category=DeprecationWarning, + module=r'.*' ) +warnings.filterwarnings( + action='default', + module=r'torch.quantization' +) + +# Specify random seed for repeatable results +torch.manual_seed(191009) + +###################################################################### +# 1. Model architecture +# --------------------- +# +# We first define the MobileNetV2 model architecture, with several notable modifications +# to enable quantization: +# +# - Replacing addition with ``nn.quantized.FloatFunctional`` +# - Insert ``QuantStub`` and ``DeQuantStub`` at the beginning and end of the network. +# - Replace ReLU6 with ReLU +# +# Note that this code is taken from +# `here `_ + +from torch.quantization import QuantStub, DeQuantStub + +def _make_divisible(v, divisor, min_value=None): + """ + This function is taken from the original tf repo. + It ensures that all layers have a channel number that is divisible by 8 + It can be seen here: + https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet.py + :param v: + :param divisor: + :param min_value: + :return: + """ + if min_value is None: + min_value = divisor + new_v = max(min_value, int(v + divisor / 2) // divisor * divisor) + # Make sure that round down does not go down by more than 10%. + if new_v < 0.9 * v: + new_v += divisor + return new_v + + +class ConvBNReLU(nn.Sequential): + def __init__(self, in_planes, out_planes, kernel_size=3, stride=1, groups=1): + padding = (kernel_size - 1) // 2 + super(ConvBNReLU, self).__init__( + nn.Conv2d(in_planes, out_planes, kernel_size, stride, padding, groups=groups, bias=False), + nn.BatchNorm2d(out_planes, momentum=0.1), + # Replace with ReLU + nn.ReLU(inplace=False) + ) + + +class InvertedResidual(nn.Module): + def __init__(self, inp, oup, stride, expand_ratio): + super(InvertedResidual, self).__init__() + self.stride = stride + assert stride in [1, 2] + + hidden_dim = int(round(inp * expand_ratio)) + self.use_res_connect = self.stride == 1 and inp == oup + + layers = [] + if expand_ratio != 1: + # pw + layers.append(ConvBNReLU(inp, hidden_dim, kernel_size=1)) + layers.extend([ + # dw + ConvBNReLU(hidden_dim, hidden_dim, stride=stride, groups=hidden_dim), + # pw-linear + nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False), + nn.BatchNorm2d(oup, momentum=0.1), + ]) + self.conv = nn.Sequential(*layers) + # Replace torch.add with floatfunctional + self.skip_add = nn.quantized.FloatFunctional() + + def forward(self, x): + if self.use_res_connect: + return self.skip_add.add(x, self.conv(x)) + else: + return self.conv(x) + + +class MobileNetV2(nn.Module): + def __init__(self, num_classes=1000, width_mult=1.0, inverted_residual_setting=None, round_nearest=8): + """ + MobileNet V2 main class + + Args: + num_classes (int): Number of classes + width_mult (float): Width multiplier - adjusts number of channels in each layer by this amount + inverted_residual_setting: Network structure + round_nearest (int): Round the number of channels in each layer to be a multiple of this number + Set to 1 to turn off rounding + """ + super(MobileNetV2, self).__init__() + block = InvertedResidual + input_channel = 32 + last_channel = 1280 + + if inverted_residual_setting is None: + inverted_residual_setting = [ + # t, c, n, s + [1, 16, 1, 1], + [6, 24, 2, 2], + [6, 32, 3, 2], + [6, 64, 4, 2], + [6, 96, 3, 1], + [6, 160, 3, 2], + [6, 320, 1, 1], + ] + + # only check the first element, assuming user knows t,c,n,s are required + if len(inverted_residual_setting) == 0 or len(inverted_residual_setting[0]) != 4: + raise ValueError("inverted_residual_setting should be non-empty " + "or a 4-element list, got {}".format(inverted_residual_setting)) + + # building first layer + input_channel = _make_divisible(input_channel * width_mult, round_nearest) + self.last_channel = _make_divisible(last_channel * max(1.0, width_mult), round_nearest) + features = [ConvBNReLU(3, input_channel, stride=2)] + # building inverted residual blocks + for t, c, n, s in inverted_residual_setting: + output_channel = _make_divisible(c * width_mult, round_nearest) + for i in range(n): + stride = s if i == 0 else 1 + features.append(block(input_channel, output_channel, stride, expand_ratio=t)) + input_channel = output_channel + # building last several layers + features.append(ConvBNReLU(input_channel, self.last_channel, kernel_size=1)) + # make it nn.Sequential + self.features = nn.Sequential(*features) + self.quant = QuantStub() + self.dequant = DeQuantStub() + # building classifier + self.classifier = nn.Sequential( + nn.Dropout(0.2), + nn.Linear(self.last_channel, num_classes), + ) + + # weight initialization + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out') + if m.bias is not None: + nn.init.zeros_(m.bias) + elif isinstance(m, nn.BatchNorm2d): + nn.init.ones_(m.weight) + nn.init.zeros_(m.bias) + elif isinstance(m, nn.Linear): + nn.init.normal_(m.weight, 0, 0.01) + nn.init.zeros_(m.bias) + + def forward(self, x): + + x = self.quant(x) + + x = self.features(x) + x = x.mean([2, 3]) + x = self.classifier(x) + x = self.dequant(x) + return x + + # Fuse Conv+BN and Conv+BN+Relu modules prior to quantization + # This operation does not change the numerics + def fuse_model(self): + for m in self.modules(): + if type(m) == ConvBNReLU: + torch.quantization.fuse_modules(m, ['0', '1', '2'], inplace=True) + if type(m) == InvertedResidual: + for idx in range(len(m.conv)): + if type(m.conv[idx]) == nn.Conv2d: + torch.quantization.fuse_modules(m.conv, [str(idx), str(idx + 1)], inplace=True) + +###################################################################### +# 2. Helper functions +# ------------------- +# +# We next define several helper functions to help with model evaluation. These mostly come from +# `here `_. + +class AverageMeter(object): + """Computes and stores the average and current value""" + def __init__(self, name, fmt=':f'): + self.name = name + self.fmt = fmt + self.reset() + + def reset(self): + self.val = 0 + self.avg = 0 + self.sum = 0 + self.count = 0 + + def update(self, val, n=1): + self.val = val + self.sum += val * n + self.count += n + self.avg = self.sum / self.count + + def __str__(self): + fmtstr = '{name} {val' + self.fmt + '} ({avg' + self.fmt + '})' + return fmtstr.format(**self.__dict__) + + +def accuracy(output, target, topk=(1,)): + """Computes the accuracy over the k top predictions for the specified values of k""" + with torch.no_grad(): + maxk = max(topk) + batch_size = target.size(0) + + _, pred = output.topk(maxk, 1, True, True) + pred = pred.t() + correct = pred.eq(target.view(1, -1).expand_as(pred)) + # print(target.view(1, -1).expand_as(pred), pred) + res = [] + for k in topk: + correct_k = correct[:k].view(-1).float().sum(0, keepdim=True) + res.append(correct_k.mul_(100.0 / batch_size)) + return res + + +def evaluate(model, criterion, data_loader, neval_batches): + model.eval() + top1 = AverageMeter('Acc@1', ':6.2f') + top5 = AverageMeter('Acc@5', ':6.2f') + cnt = 0 + with torch.no_grad(): + for image, target in data_loader: + print(target) + output = model(image) + loss = criterion(output, target) + cnt += 1 + acc1, acc5 = accuracy(output, target, topk=(1, 5)) + print('.', end = '') + top1.update(acc1[0], image.size(0)) + top5.update(acc5[0], image.size(0)) + if cnt >= neval_batches: + return top1, top5 + + return top1, top5 + +def load_model(model_file): + model = MobileNetV2() + state_dict = torch.load(model_file) + model.load_state_dict(state_dict) + model.to('cpu') + return model + +def print_size_of_model(model): + torch.save(model.state_dict(), "temp.p") + print('Size (MB):', os.path.getsize("temp.p")/1e6) + os.remove('temp.p') + +###################################################################### +# 3. Define dataset and data loaders +# ---------------------------------- +# +# As our last major setup step, we define our dataloaders for our training and testing set. +# The specific dataset we've created for this tutorial contains just 1000 images, one from +# each class (this dataset, at just over 250 MB, is small enough that it can be downloaded +# relatively easily). These functions mostly come from +# `here `_. + +def prepare_data_loaders(data_path): + + traindir = os.path.join(data_path, 'train') + valdir = os.path.join(data_path, 'val') + normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]) + + dataset = torchvision.datasets.ImageFolder( + traindir, + transforms.Compose([ + transforms.RandomResizedCrop(224), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + normalize, + ])) + + dataset_test = torchvision.datasets.ImageFolder( + valdir, + transforms.Compose([ + transforms.Resize(256), + transforms.CenterCrop(224), + transforms.ToTensor(), + normalize, + ])) + + train_sampler = torch.utils.data.RandomSampler(dataset) + test_sampler = torch.utils.data.SequentialSampler(dataset_test) + + data_loader = torch.utils.data.DataLoader( + dataset, batch_size=train_batch_size, + sampler=train_sampler, num_workers=1) + + data_loader_test = torch.utils.data.DataLoader( + dataset_test, batch_size=eval_batch_size, + sampler=test_sampler, num_workers=4, pin_memory=True) + + return data_loader, data_loader_test + +###################################################################### +# Next, we'll load in the pre-trained MobileNetV2 model + +data_path = 'data/imagenet_1k' +saved_model_dir = 'data/' +float_model_file = 'mobilenet_quantization.pth' +scripted_float_model_file = 'mobilenet_quantization_scripted.pth' +scripted_quantized_model_file = 'mobilenet_quantization_scripted_quantized.pth' + +train_batch_size = 30 +eval_batch_size = 30 + +data_loader, data_loader_test = prepare_data_loaders(data_path) +criterion = nn.CrossEntropyLoss() +float_model = load_model(saved_model_dir + float_model_file).to('cpu') + +###################################################################### +# Next, we'll "fuse modules"; this can both make the model faster by saving on memory access +# while also improving numerical accuracy. While this can be used with any model, this is +# especially common with quantized models. + +print('\n Inverted Residual Block: Before fusion \n\n', float_model.features[1].conv) +float_model.eval() + +# Fusion is optional +float_model.fuse_model() + +# Note fusion of Conv+BN+Relu and Conv+Relu +print('\n Inverted Residual Block: After fusion\n\n',float_model.features[1].conv) + +###################################################################### +# Finally to get a "baseline" accuracy, let's see the accuracy of our un-quantized model +# with fused modules + +num_eval_batches = 10 + +print("Size of baseline model") +print_size_of_model(float_model) + +top1, top5 = evaluate(float_model, criterion, data_loader_test, neval_batches=num_eval_batches) +print('Evaluation accuracy on %d images, %2.2f'%(num_eval_batches * eval_batch_size, top1.avg)) +torch.jit.save(torch.jit.script(float_model), saved_model_dir + scripted_float_model_file) + +###################################################################### +# You should see 78% accuracy on 300 images, a solid baseline for ImageNet, +# especially considering our model is just 14.0 MB. +# +# This will be our baseline to compare to. Next, let's try different quantization methods +# +# 4. Post-training static quantization +# ------------------------------------ +# +# Post-training static quantization involves not just converting the weights from float to int, +# as in dynamic quantization, but also performing the additional step of first feeding batches +# of data through the network and computing the resulting distributions of the different activations +# (specifically, this is done by inserting `observer` modules at different points that record this +# data). These distributions are then used to determine how the specifically the different activations +# should be quantized at inference time (a simple technique would be to simply divide the entire range +# of activations into 256 levels, but we support more sophisticated methods as well). Importantly, +# this additional step allows us to pass quantized values between operations instead of converting these values to floats - and then back to ints - between every operation, resulting in a significant speed-up. + +num_calibration_batches = 10 + +myModel = load_model(saved_model_dir + float_model_file).to('cpu') +myModel.eval() + +# Fuse Conv, bn and relu +myModel.fuse_model() + +# Specify quantization configuration +# Start with simple min/max range estimation and per-tensor quantization of weights +myModel.qconfig = torch.quantization.default_qconfig +print(myModel.qconfig) +torch.quantization.prepare(myModel, inplace=True) + +# Calibrate first +print('Post Training Quantization Prepare: Inserting Observers') +print('\n Inverted Residual Block:After observer insertion \n\n', myModel.features[1].conv) + +# Calibrate with the training set +evaluate(myModel, criterion, data_loader, neval_batches=num_calibration_batches) +print('Post Training Quantization: Calibration done') + +# Convert to quantized model +torch.quantization.convert(myModel, inplace=True) +print('Post Training Quantization: Convert done') +print('\n Inverted Residual Block: After fusion and quantization, note fused modules: \n\n',myModel.features[1].conv) + +print("Size of model after quantization") +print_size_of_model(myModel) + +top1, top5 = evaluate(myModel, criterion, data_loader_test, neval_batches=num_eval_batches) +print('Evaluation accuracy on %d images, %2.2f'%(num_eval_batches * eval_batch_size, top1.avg)) + +###################################################################### +# For this quantized model, we see a significantly lower accuracy of just 62.33% on these same 30 +# images. Nevertheless, we did reduce the size of our model down to just under 3.6 MB, almost a 4x +# decrease. +# +# In addition, we can significantly improve on the accuracy simply by using a different +# quantization configuration. We repeat the same exercise with the recommended configuration for +# quantizing for x86 architectures. This configuration does the following: +# +# - Quantizes weights on a per-channel basis +# - Uses a histogram observer that collects a histogram of activations and then picks +# quantization parameters in an optimal manner. +# + +per_channel_quantized_model = load_model(saved_model_dir+float_model_file) +per_channel_quantized_model.eval() +per_channel_quantized_model.fuse_model() +per_channel_quantized_model.qconfig = torch.quantization.get_default_qconfig('fbgemm') +print(per_channel_quantized_model.qconfig) + +torch.quantization.prepare(per_channel_quantized_model, inplace=True) +evaluate(per_channel_quantized_model,criterion, data_loader, num_calibration_batches) +torch.quantization.convert(per_channel_quantized_model, inplace=True) +top1, top5 = evaluate(per_channel_quantized_model, criterion, data_loader_test, neval_batches=num_eval_batches) +print('Evaluation accuracy on %d images, %2.2f'%(num_eval_batches * eval_batch_size, top1.avg)) +torch.jit.save(torch.jit.script(per_channel_quantized_model), saved_model_dir + scripted_quantized_model_file) + +###################################################################### +# Changing just this quantization configuration method resulted in an increase +# of the accuracy to 74%! Still, this is 4% worse than the baseline of 78% achieved above. +# So lets try quantization aware training. +# +# 5. Quantization-aware training +# ------------------------------ +# +# Quantization-aware training (QAT) is the quantization method that typically results in the highest accuracy. +# With QAT, all weights and activations are “fake quantized” during both the forward and backward passes of +# training: that is, float values are rounded to mimic int8 values, but all computations are still done with +# floating point numbers. Thus, all the weight adjustments during training are made while “aware” of the fact +# that the model will ultimately be quantized; after quantizing, therefore, this method will usually yield +# higher accuracy than either dynamic quantization or post-training static quantization. +# +# The overall workflow for actually performing QAT is very similar to before: +# +# - We can use the same model as before: there is no additional preparation needed for quantization-aware +# training. +# - We need to use a ``qconfig`` specifying what kind of fake-quantization is to be inserted after weights +# and activations, instead of specifying observers +# +# We first define a training function: + +def train_one_epoch(model, criterion, optimizer, data_loader, device, ntrain_batches): + model.train() + top1 = AverageMeter('Acc@1', ':6.2f') + top5 = AverageMeter('Acc@5', ':6.2f') + avgloss = AverageMeter('Loss', '1.5f') + + cnt = 0 + for image, target in data_loader: + start_time = time.time() + print('.', end = '') + cnt += 1 + image, target = image.to(device), target.to(device) + output = model(image) + loss = criterion(output, target) + optimizer.zero_grad() + loss.backward() + optimizer.step() + acc1, acc5 = accuracy(output, target, topk=(1, 5)) + top1.update(acc1[0], image.size(0)) + top5.update(acc5[0], image.size(0)) + avgloss.update(loss, image.size(0)) + if cnt >= ntrain_batches: + print('Loss', avgloss.avg) + + print('Training: * Acc@1 {top1.avg:.3f} Acc@5 {top5.avg:.3f}' + .format(top1=top1, top5=top5)) + return + + print('Full imagenet train set: * Acc@1 {top1.global_avg:.3f} Acc@5 {top5.global_avg:.3f}' + .format(top1=top1, top5=top5)) + return + +###################################################################### +# We fuse modules as before + +qat_model = load_model(saved_model_dir + float_model_file) +qat_model.fuse_model() + +optimizer = torch.optim.SGD(qat_model.parameters(), lr = 0.0001) +qat_model.qconfig = torch.quantization.get_default_qat_qconfig('fbgemm') + +###################################################################### +# Finally, ``prepare_qat`` performs the "fake quantization", preparing the model for quantization-aware +# training + +torch.quantization.prepare_qat(qat_model, inplace=True) +print('Inverted Residual Block: After preparation for QAT, note fake-quantization modules \n',qat_model.features[1].conv) + +###################################################################### +# Training a quantized model with high accuracy requires accurate modeling of numerics at +# inference. For quantization aware training, therefore, we modify the training loop by: +# +# - Switch batch norm to use running mean and variance towards the end of training to better +# match inference numerics. +# - We also freeze the quantizer parameters (scale and zero-point) and fine tune the weights. + +num_train_batches = 20 + +Train and check accuracy after each epoch +for nepoch in range(8): + train_one_epoch(qat_model, criterion, optimizer, data_loader, torch.device('cpu'), num_train_batches) + if nepoch > 3: + # Freeze quantizer parameters + qat_model.apply(torch.quantization.disable_observer) + if nepoch > 2: + # Freeze batch norm mean and variance estimates + qat_model.apply(torch.nn.intrinsic.qat.freeze_bn_stats) + + # Check the accuracy after each epoch + quantized_model = torch.quantization.convert(qat_model.eval(), inplace=False) + quantized_model.eval() + top1, top5 = evaluate(quantized_model,criterion, data_loader_test, neval_batches=num_eval_batches) + print('Epoch %d :Evaluation accuracy on %d images, %2.2f'%(nepoch, num_eval_batches * eval_batch_size, top1.avg)) + +##################################################################### +# More on quantization-aware training: +# +# - QAT is a super-set of post training quant techniques that allows for more debugging. +# For example, we can analyze if the accuracy of the model is limited by weight or activation +# quantization. +# - We can also simulate the accuracy of a quantized model in floating point since +# we are using fake-quantization to model the numerics of actual quantized arithmetic. +# - We can mimic post training quantization easily too. +# +# Speedup from quantization +# ^^^^^^^^^^^^^^^^^^^^^^^^^ +# +# Finally, let's confirm something we alluded to above: do our quantized models actually perform inference +# faster? Let's test: + +def run_benchmark(model_file, img_loader): + elapsed = 0 + model = torch.jit.load(model_file) + model.eval() + num_batches = 5 + # Run the scripted model on a few batches of images + for i, (images, target) in enumerate(img_loader): + if i < num_batches: + start = time.time() + output = model(images) + end = time.time() + elapsed = elapsed + (end-start) + else: + break + num_images = images.size()[0] * num_batches + + print('Elapsed time: %3.0f ms' % (elapsed/num_images*1000)) + return elapsed + +run_benchmark(saved_model_dir + scripted_float_model_file, data_loader_test) + +run_benchmark(saved_model_dir + scripted_quantized_model_file, data_loader_test) -print(val_data) -print(type(val_data)) +###################################################################### +# Running this locally on a MacBook pro yielded 61 ms for the regular model, and +# just 20 ms for the quantized model, illustrating the typical 2-4x speedup +# we see for quantized models compared to floating point ones. +# +# Conclusion +# ---------- +# +# In this tutorial, we showed two quantization methods - post-training static quantization, +# and quantization-aware training - describing what they do "under the hood" and how to use +# them in PyTorch. +# +# Thanks for reading! As always, we welcome any feedback, so please create an issue +# `here `_ if you have any. diff --git a/index.rst b/index.rst index fc8b630760a..ec69a77ab66 100644 --- a/index.rst +++ b/index.rst @@ -223,6 +223,19 @@ Extending PyTorch

+Quantization (experimental) +--------------------------- + +.. customgalleryitem:: + :tooltip: (experimental) Static Quantization with Eager Mode in PyTorch + :figure: /_static/img/qat.png + :description: :doc:`advanced/static_quantization_tutorial` + +.. raw:: html + +
+ + PyTorch in Other Languages -------------------------- @@ -340,6 +353,14 @@ PyTorch Fundamentals In-Depth advanced/numpy_extensions_tutorial advanced/cpp_extension +.. toctree:: + :maxdepth: 2 + :includehidden: + :hidden: + :caption: Quantization (experimental) + + advanced/static_quantization_tutorial + .. toctree:: :maxdepth: 2 :includehidden: From c37b14a8d293056b467516f8bfde53fead928c9d Mon Sep 17 00:00:00 2001 From: Seth Weidman Date: Wed, 9 Oct 2019 21:44:03 -0700 Subject: [PATCH 3/7] Fix author's GitHub --- advanced_source/static_quantization_tutorial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced_source/static_quantization_tutorial.py b/advanced_source/static_quantization_tutorial.py index f958b77747f..30cacc4a8d0 100644 --- a/advanced_source/static_quantization_tutorial.py +++ b/advanced_source/static_quantization_tutorial.py @@ -2,7 +2,7 @@ (experimental) Static Quantization with Eager Mode in PyTorch ========================================================= -**Author**: `raghuraman krishnamoorthi `_ +**Author**: `Raghuraman Krishnamoorthi `_ **Edited by**: `Seth Weidman `_ From 040fcdd339cb9cafca2802b6b7c1806a011cf501 Mon Sep 17 00:00:00 2001 From: Seth Weidman Date: Wed, 9 Oct 2019 21:56:34 -0700 Subject: [PATCH 4/7] Comment text line --- advanced_source/static_quantization_tutorial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced_source/static_quantization_tutorial.py b/advanced_source/static_quantization_tutorial.py index 30cacc4a8d0..e86a50236b8 100644 --- a/advanced_source/static_quantization_tutorial.py +++ b/advanced_source/static_quantization_tutorial.py @@ -550,7 +550,7 @@ def train_one_epoch(model, criterion, optimizer, data_loader, device, ntrain_bat num_train_batches = 20 -Train and check accuracy after each epoch +# Train and check accuracy after each epoch for nepoch in range(8): train_one_epoch(qat_model, criterion, optimizer, data_loader, torch.device('cpu'), num_train_batches) if nepoch > 3: From ba0a7a1f1160e6cf448c4d2aa5c0896285f06368 Mon Sep 17 00:00:00 2001 From: Seth Weidman Date: Thu, 10 Oct 2019 11:43:13 -0700 Subject: [PATCH 5/7] Address Raghu's static quantization comments --- advanced_source/static_quantization_tutorial.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/advanced_source/static_quantization_tutorial.py b/advanced_source/static_quantization_tutorial.py index e86a50236b8..3b3472edc05 100644 --- a/advanced_source/static_quantization_tutorial.py +++ b/advanced_source/static_quantization_tutorial.py @@ -371,7 +371,7 @@ def prepare_data_loaders(data_path): print('\n Inverted Residual Block: Before fusion \n\n', float_model.features[1].conv) float_model.eval() -# Fusion is optional +# Fuses modules float_model.fuse_model() # Note fusion of Conv+BN+Relu and Conv+Relu @@ -567,6 +567,10 @@ def train_one_epoch(model, criterion, optimizer, data_loader, device, ntrain_bat print('Epoch %d :Evaluation accuracy on %d images, %2.2f'%(nepoch, num_eval_batches * eval_batch_size, top1.avg)) ##################################################################### +# Here, we just perform quantization-aware training for a small number of epochs. Nevertheless, +# quantization-aware training yields an accuracy of over 71% on the entire imagenet dataset, +# which is close to the floating point accuracy of 71.9%. +# # More on quantization-aware training: # # - QAT is a super-set of post training quant techniques that allows for more debugging. From 3c6390fdce1aa77a543810ea2cc7bf50557f6e27 Mon Sep 17 00:00:00 2001 From: Seth Weidman Date: Thu, 10 Oct 2019 11:56:55 -0700 Subject: [PATCH 6/7] Add correct download to Makefile --- Makefile | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 3b9773d9409..28124fb7e76 100644 --- a/Makefile +++ b/Makefile @@ -81,10 +81,6 @@ download: wget -N https://s3.amazonaws.com/pytorch-tutorial-assets/lenet_mnist_model.pth -P $(DATADIR) cp $(DATADIR)/lenet_mnist_model.pth ./beginner_source/data/lenet_mnist_model.pth - # Download dataset for advanced_source/static_quantization_tutorial.py - wget -N https://s3.amazonaws.com/pytorch-tutorial-assets/imagenet_1k.zip -P $(DATADIR) - unzip -q -o $(DATADIR)/imagenet_1k.zip -d advanced_source/data/ - # Download model for advanced_source/dynamic_quantization_tutorial.py wget -N https://s3.amazonaws.com/pytorch-tutorial-assets/word_language_model_quantize.pth -P $(DATADIR) cp $(DATADIR)/word_language_model_quantize.pth advanced_source/data/word_language_model_quantize.pth @@ -93,6 +89,14 @@ download: wget -N https://s3.amazonaws.com/pytorch-tutorial-assets/wikitext-2.zip -P $(DATADIR) unzip -q -o $(DATADIR)/wikitext-2.zip -d advanced_source/data/ + # Download model for advanced_source/static_quantization_tutorial.py + wget -N https://s3.amazonaws.com/pytorch-tutorial-assets/mobilenet_quantization.pth -P $(DATADIR) + cp $(DATADIR)/mobilenet_quantization.pth advanced_source/data/mobilenet_quantization.pth + + # Download dataset for advanced_source/static_quantization_tutorial.py + wget -N https://s3.amazonaws.com/pytorch-tutorial-assets/imagenet_1k.zip -P $(DATADIR) + unzip -q -o $(DATADIR)/imagenet_1k.zip -d advanced_source/data/ + docs: make download From 46d8c26fbe5c1de12a8dbaf45812e330e4462afe Mon Sep 17 00:00:00 2001 From: Seth Weidman Date: Thu, 10 Oct 2019 13:36:25 -0700 Subject: [PATCH 7/7] Remove dataloader arguments causing errors --- advanced_source/static_quantization_tutorial.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/advanced_source/static_quantization_tutorial.py b/advanced_source/static_quantization_tutorial.py index 3b3472edc05..7dcb9df6842 100644 --- a/advanced_source/static_quantization_tutorial.py +++ b/advanced_source/static_quantization_tutorial.py @@ -339,11 +339,11 @@ def prepare_data_loaders(data_path): data_loader = torch.utils.data.DataLoader( dataset, batch_size=train_batch_size, - sampler=train_sampler, num_workers=1) + sampler=train_sampler) data_loader_test = torch.utils.data.DataLoader( dataset_test, batch_size=eval_batch_size, - sampler=test_sampler, num_workers=4, pin_memory=True) + sampler=test_sampler) return data_loader, data_loader_test @@ -455,7 +455,7 @@ def prepare_data_loaders(data_path): # quantization parameters in an optimal manner. # -per_channel_quantized_model = load_model(saved_model_dir+float_model_file) +per_channel_quantized_model = load_model(saved_model_dir + float_model_file) per_channel_quantized_model.eval() per_channel_quantized_model.fuse_model() per_channel_quantized_model.qconfig = torch.quantization.get_default_qconfig('fbgemm')