From e232fd2d0b470fc6d474a7eb12396a171ff3c693 Mon Sep 17 00:00:00 2001
From: Neta Zmora <neta.zmora@intel.com>
Date: Thu, 6 Dec 2018 16:43:28 +0200
Subject: [PATCH] Documentation refactoring

Add missing files :-(
---
 docs/imgs/algorithms.png                | Bin 81123 -> 0 bytes
 docs/index.html                         |   2 +-
 docs/tutorial-lang_model/index.html     | 703 ++++++++++++++++++++++++
 docs/tutorial-struct_pruning/index.html | 312 +++++++++++
 4 files changed, 1016 insertions(+), 1 deletion(-)
 delete mode 100644 docs/imgs/algorithms.png
 create mode 100644 docs/tutorial-lang_model/index.html
 create mode 100644 docs/tutorial-struct_pruning/index.html

diff --git a/docs/imgs/algorithms.png b/docs/imgs/algorithms.png
deleted file mode 100644
index c7d97885173ce1f234121b5d33bef1cbf15feda9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 81123
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%0A%Y23I7O(^%DEqx^k^s
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
I$yo;fAMy7rT>t<8

diff --git a/docs/index.html b/docs/index.html
index a608c52..543fd3b 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -273,5 +273,5 @@ And of course, if we used a sparse or compressed representation, then we are red
 
 <!--
 MkDocs version : 0.17.2
-Build Date UTC : 2018-12-06 14:04:25
+Build Date UTC : 2018-12-06 14:40:20
 -->
diff --git a/docs/tutorial-lang_model/index.html b/docs/tutorial-lang_model/index.html
new file mode 100644
index 0000000..bf81346
--- /dev/null
+++ b/docs/tutorial-lang_model/index.html
@@ -0,0 +1,703 @@
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  
+  <link rel="shortcut icon" href="../img/favicon.ico">
+  <title>Pruning a Language Model - Neural Network Distiller</title>
+  <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
+
+  <link rel="stylesheet" href="../css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../css/theme_extra.css" type="text/css" />
+  <link rel="stylesheet" href="../css/highlight.css">
+  <link href="../extra.css" rel="stylesheet">
+  
+  <script>
+    // Current page data
+    var mkdocs_page_name = "Pruning a Language Model";
+    var mkdocs_page_input_path = "tutorial-lang_model.md";
+    var mkdocs_page_url = "/tutorial-lang_model/index.html";
+  </script>
+  
+  <script src="../js/jquery-2.1.1.min.js"></script>
+  <script src="../js/modernizr-2.8.3.min.js"></script>
+  <script type="text/javascript" src="../js/highlight.pack.js"></script> 
+  
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
+      <div class="wy-side-nav-search">
+        <a href="../index.html" class="icon icon-home"> Neural Network Distiller</a>
+        <div role="search">
+  <form id ="rtd-search-form" class="wy-form" action="../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+  </form>
+</div>
+      </div>
+
+      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+	<ul class="current">
+	  
+          
+            <li class="toctree-l1">
+		
+    <a class="" href="../index.html">Home</a>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <a class="" href="../install/index.html">Installation</a>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <a class="" href="../usage/index.html">Usage</a>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <a class="" href="../schedule/index.html">Compression Scheduling</a>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <span class="caption-text">Compressing Models</span>
+    <ul class="subnav">
+                <li class="">
+                    
+    <a class="" href="../pruning/index.html">Pruning</a>
+                </li>
+                <li class="">
+                    
+    <a class="" href="../regularization/index.html">Regularization</a>
+                </li>
+                <li class="">
+                    
+    <a class="" href="../quantization/index.html">Quantization</a>
+                </li>
+                <li class="">
+                    
+    <a class="" href="../knowledge_distillation/index.html">Knowledge Distillation</a>
+                </li>
+                <li class="">
+                    
+    <a class="" href="../conditional_computation/index.html">Conditional Computation</a>
+                </li>
+    </ul>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <span class="caption-text">Algorithms</span>
+    <ul class="subnav">
+                <li class="">
+                    
+    <a class="" href="../algo_pruning/index.html">Pruning</a>
+                </li>
+                <li class="">
+                    
+    <a class="" href="../algo_quantization/index.html">Quantization</a>
+                </li>
+                <li class="">
+                    
+    <a class="" href="../algo_earlyexit/index.html">Early Exit</a>
+                </li>
+    </ul>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <a class="" href="../model_zoo/index.html">Model Zoo</a>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <a class="" href="../jupyter/index.html">Jupyter Notebooks</a>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <a class="" href="../design/index.html">Design</a>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <span class="caption-text">Tutorials</span>
+    <ul class="subnav">
+                <li class="">
+                    
+    <a class="" href="../tutorial-struct_pruning/index.html">Pruning Filters and Channels</a>
+                </li>
+                <li class=" current">
+                    
+    <a class="current" href="index.html">Pruning a Language Model</a>
+    <ul class="subnav">
+            
+    <li class="toctree-l3"><a href="#using-distiller-to-prune-a-pytorch-language-model">Using Distiller to prune a PyTorch language model</a></li>
+    
+        <ul>
+        
+            <li><a class="toctree-l4" href="#contents">Contents</a></li>
+        
+            <li><a class="toctree-l4" href="#introduction">Introduction</a></li>
+        
+            <li><a class="toctree-l4" href="#setup">Setup</a></li>
+        
+            <li><a class="toctree-l4" href="#creating-compression-baselines">Creating compression baselines</a></li>
+        
+            <li><a class="toctree-l4" href="#compressing-the-language-model">Compressing the language model</a></li>
+        
+            <li><a class="toctree-l4" href="#until-next-time">Until next time</a></li>
+        
+        </ul>
+    
+
+    </ul>
+                </li>
+    </ul>
+	    </li>
+          
+        </ul>
+      </div>
+      &nbsp;
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../index.html">Neural Network Distiller</a>
+      </nav>
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../index.html">Docs</a> &raquo;</li>
+    
+      
+        
+          <li>Tutorials &raquo;</li>
+        
+      
+    
+    <li>Pruning a Language Model</li>
+    <li class="wy-breadcrumbs-aside">
+      
+    </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main">
+            <div class="section">
+              
+                <h1 id="using-distiller-to-prune-a-pytorch-language-model">Using Distiller to prune a PyTorch language model</h1>
+<h2 id="contents">Contents</h2>
+<ul>
+<li><a href="#introduction">Introduction</a></li>
+<li><a href="#setup">Setup</a></li>
+<li><a href="#preparing-the-code">Preparing the code</a></li>
+<li><a href="#training-loop">Training-loop</a></li>
+<li><a href="#creating-compression-baselines">Creating compression baselines</a></li>
+<li><a href="#compressing-the-language-model">Compressing the language model</a></li>
+<li><a href="#what-are-we-compressing">What are we compressing?</a></li>
+<li><a href="#how-are-we-compressing">How are we compressing?</a></li>
+<li><a href="#when-are-we-compressing">When are we compressing?</a></li>
+<li><a href="#until-next-time">Until next time</a></li>
+</ul>
+<h2 id="introduction">Introduction</h2>
+<p>In this tutorial I'll show you how to compress a word-level language model using <a href="https://github.com/NervanaSystems/distiller">Distiller</a>.  Specifically, we use PyTorch’s <a href="https://github.com/pytorch/examples/tree/master/word_language_model">word-level language model sample code</a> as the code-base of our example, weave in some Distiller code, and show how we compress the model using two different element-wise pruning algorithms.  To make things manageable, I've divided the tutorial to two parts: in the first we will setup the sample application and prune using <a href="https://arxiv.org/abs/1710.01878">AGP</a>.  In the second part I'll show how I've added Baidu's RNN pruning algorithm and then use it to prune the same word-level language model.  The completed code is available <a href="https://github.com/NervanaSystems/distiller/tree/master/examples/word_language_model">here</a>.</p>
+<p>The results are displayed below and the code is available <a href="https://github.com/NervanaSystems/distiller/tree/master/examples/word_language_model">here</a>.
+Note that we can improve the results by training longer, since the loss curves are usually still decreasing at the end of epoch 40.  However, for demonstration purposes we don’t need to do this.</p>
+<table>
+<thead>
+<tr>
+<th>Type</th>
+<th>Sparsity</th>
+<th align="center">NNZ</th>
+<th>Validation</th>
+<th>Test</th>
+<th>Command line</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Small</td>
+<td>0%</td>
+<td align="center">7,135,600</td>
+<td>101.13</td>
+<td>96.29</td>
+<td>time python3 main.py --cuda --epochs 40 --tied --wd=1e-6</td>
+</tr>
+<tr>
+<td>Medium</td>
+<td>0%</td>
+<td align="center">28,390,700</td>
+<td>88.17</td>
+<td>84.21</td>
+<td>time python3 main.py --cuda --emsize 650 --nhid 650 --dropout 0.5 --epochs 40 --tied,--wd=1e-6</td>
+</tr>
+<tr>
+<td>Large</td>
+<td>0%</td>
+<td align="center">85,917,000</td>
+<td>87.49</td>
+<td>83.85</td>
+<td>time python3 main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --tied --wd=1e-6</td>
+</tr>
+<tr>
+<td>Large</td>
+<td>70%</td>
+<td align="center">25,487,550</td>
+<td>90.67</td>
+<td>85.96</td>
+<td>time python3 main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --tied --compress=../../examples/agp-pruning/word_lang_model.LARGE_70.schedule_agp.yaml</td>
+</tr>
+<tr>
+<td>Large</td>
+<td>70%</td>
+<td align="center">25,487,550</td>
+<td>90.59</td>
+<td>85.84</td>
+<td>time python3 main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --tied --compress=../../examples/agp-pruning/word_lang_model.LARGE_70.schedule_agp.yaml --wd=1e-6</td>
+</tr>
+<tr>
+<td>Large</td>
+<td>70%</td>
+<td align="center">25,487,550</td>
+<td>87.40</td>
+<td>82.93</td>
+<td>time python3 main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --tied --compress=../../examples/agp-pruning/word_lang_model.LARGE_70B.schedule_agp.yaml --wd=1e-6</td>
+</tr>
+<tr>
+<td>Large</td>
+<td>80.4%</td>
+<td align="center">16,847,550</td>
+<td>89.31</td>
+<td>83.64</td>
+<td>time python3 main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --tied --compress=../../examples/agp-pruning/word_lang_model.LARGE_80.schedule_agp.yaml --wd=1e-6</td>
+</tr>
+<tr>
+<td>Large</td>
+<td>90%</td>
+<td align="center">8,591,700</td>
+<td>90.70</td>
+<td>85.67</td>
+<td>time python3 main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --tied --compress=../../examples/agp-pruning/word_lang_model.LARGE_90.schedule_agp.yaml --wd=1e-6</td>
+</tr>
+<tr>
+<td>Large</td>
+<td>95%</td>
+<td align="center">4,295,850</td>
+<td>98.42</td>
+<td>92.79</td>
+<td>time python3 main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --tied --compress=../../examples/agp-pruning/word_lang_model.LARGE_95.schedule_agp.yaml --wd=1e-6</td>
+</tr>
+</tbody>
+</table>
+<p align="center"><b>Table 1: AGP language model pruning results. <br>NNZ stands for number of non-zero coefficients (embeddings are counted once, because they are tied).</b></p>
+
+<p><center><img alt="Example 1" src="../imgs/word_lang_model_performance.png" /></center>
+<p align="center">
+  <b>Figure 1: Perplexity vs model size (lower perplexity is better).</b>
+</p></p>
+<p>The model is composed of an Encoder embedding, two LSTMs, and a Decoder embedding.  The Encoder and decoder embeddings (projections) are tied to improve perplexity results (per https://arxiv.org/pdf/1611.01462.pdf), so in the sparsity statistics we account for only one of the encoder/decoder embeddings.  We used the WikiText2 dataset (twice as large as PTB).</p>
+<p>We compared three model sizes: small (7.1M; 14M), medium (28M; 50M), large: (86M; 136M) – reported as (#parameters net/tied; #parameters gross).
+The results reported below use a preset seed (for reproducibility), and we expect results can be improved if we allow “true” pseudo-randomness.  We limited our tests to 40 epochs, even though validation perplexity was still trending down.</p>
+<p>Essentially, this recreates the language model experiment in the AGP paper, and validates its conclusions:
+<em> “We see that sparse models are able to outperform dense models which have significantly more parameters.”
+</em> The 80% sparse large model (which has 16.9M parameters and a perplexity of 83.64) is able to outperform the dense medium (which has 28.4M parameters and a perplexity of 84.21), a model which has 1.7 times more parameters.  It also outperform the dense large model, which exemplifies how pruning can act as a regularizer.
+* “Our results show that pruning works very well not only on the dense LSTM weights and dense softmax layer but also the dense embedding matrix. This suggests that during the optimization procedure the neural network can find a good sparse embedding for the words in the vocabulary that works well together with the sparse connectivity structure of the LSTM weights and softmax layer.”</p>
+<h2 id="setup">Setup</h2>
+<p>We start by cloning Pytorch’s example <a href="https://github.com/pytorch/examples/tree/master">repository</a>. I’ve copied the language model code to distiller’s examples/word_language_model directory, so I’ll use that for the rest of the tutorial.
+Next, let’s create and activate a virtual environment, as explained in Distiller's <a href="https://github.com/NervanaSystems/distiller#create-a-python-virtual-environment">README</a> file.
+Now we can turn our attention to <a href="https://github.com/pytorch/examples/blob/master/word_language_model/main.py">main.py</a>, which contains the training application.</p>
+<h3 id="preparing-the-code">Preparing the code</h3>
+<p>We begin by adding code to invoke Distiller in file <code>main.py</code>.  This involves a bit of mechanics, because we did not <code>pip install</code> Distiller in our environment (we don’t have a <code>setup.py</code> script for Distiller as of yet).  To make Distiller library functions accessible from <code>main.py</code>, we modify <code>sys.path</code> to include the distiller root directory by taking the current directory and pointing two directories up.  This is very specific to the location of this example code, and it will break if you’ve placed the code elsewhere – so be aware.</p>
+<pre><code class="python">import os
+import sys
+script_dir = os.path.dirname(__file__)
+module_path = os.path.abspath(os.path.join(script_dir, '..', '..'))
+if module_path not in sys.path:
+    sys.path.append(module_path)
+import distiller
+import apputils
+from distiller.data_loggers import TensorBoardLogger, PythonLogger
+</code></pre>
+
+<p>Next, we augment the application arguments with two Distiller-specific arguments.  The first, <code>--summary</code>, gives us the ability to do simple compression instrumentation (e.g. log sparsity statistics).  The second argument, <code>--compress</code>, is how we tell the application where the compression scheduling file is located.
+We also add two arguments - momentum and weight-decay - for the SGD optimizer.  As I explain later, I replaced the original code's optimizer with SGD, so we need these extra arguments.</p>
+<pre><code class="python"># Distiller-related arguments
+SUMMARY_CHOICES = ['sparsity', 'model', 'modules', 'png', 'percentile']
+parser.add_argument('--summary', type=str, choices=SUMMARY_CHOICES,
+                    help='print a summary of the model, and exit - options: ' +
+                    ' | '.join(SUMMARY_CHOICES))
+parser.add_argument('--compress', dest='compress', type=str, nargs='?', action='store',
+                    help='configuration file for pruning the model (default is to use hard-coded schedule)')
+parser.add_argument('--momentum', default=0., type=float, metavar='M',
+                    help='momentum')
+parser.add_argument('--weight-decay', '--wd', default=0., type=float,
+                    metavar='W', help='weight decay (default: 1e-4)')
+</code></pre>
+
+<p>We add code to handle the <code>--summary</code> application argument.  It can be as simple as forwarding to <code>distiller.model_summary</code> or more complex, as in the Distiller sample.</p>
+<pre><code class="python">if args.summary:
+    distiller.model_summary(model, None, args.summary, 'wikitext2')
+    exit(0)
+</code></pre>
+
+<p>Similarly, we add code to handle the <code>--compress</code> argument, which creates a CompressionScheduler and configures it from a YAML schedule file:</p>
+<pre><code class="python">if args.compress:
+    source = args.compress
+    compression_scheduler = distiller.CompressionScheduler(model)
+    distiller.config.fileConfig(model, None, compression_scheduler, args.compress, msglogger)
+</code></pre>
+
+<p>We also create the optimizer, and the learning-rate decay policy scheduler.  The original PyTorch example manually manages the optimization and LR decay process, but I think that having a standard optimizer and LR-decay schedule gives us the flexibility to experiment with these during the training process.  Using an <a href="https://pytorch.org/docs/stable/_modules/torch/optim/sgd.html">SGD optimizer</a> configured with <code>momentum=0</code> and <code>weight_decay=0</code>, and a <a href="https://pytorch.org/docs/stable/_modules/torch/optim/lr_scheduler.html">ReduceLROnPlateau LR-decay policy</a> with <code>patience=0</code> and <code>factor=0.5</code> will give the same behavior as in the original PyTorch example.  From there, we can experiment with the optimizer and LR-decay configuration.</p>
+<pre><code class="python">optimizer = torch.optim.SGD(model.parameters(), args.lr,
+                            momentum=args.momentum,
+                            weight_decay=args.weight_decay)
+lr_scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min',
+                                                          patience=0, verbose=True, factor=0.5)
+</code></pre>
+
+<p>Next, we add code to setup the logging backends: a Python logger backend which reads its configuration from file and logs messages to the console and log file (<code>pylogger</code>); and a TensorBoard backend logger which logs statistics to a TensorBoard data file (<code>tflogger</code>).  I configured the TensorBoard backend to log gradients because RNNs suffer from vanishing and exploding gradients, so we might want to take a look in case the training experiences a sudden failure.
+This code is not strictly required, but it is quite useful to be able to log the session progress, and to export logs to TensorBoard for realtime visualization of the training progress.</p>
+<pre><code class="python"># Distiller loggers
+msglogger = apputils.config_pylogger('logging.conf', None)
+tflogger = TensorBoardLogger(msglogger.logdir)
+tflogger.log_gradients = True
+pylogger = PythonLogger(msglogger)
+</code></pre>
+
+<h3 id="training-loop">Training loop</h3>
+<p>Now we scroll down all the way to the train() function.  We'll change its signature to include the <code>epoch</code>, <code>optimizer</code>, and <code>compression_schdule</code>.   We'll soon see why we need these.</p>
+<pre><code class="python">def train(epoch, optimizer, compression_scheduler=None)
+</code></pre>
+
+<p>Function <code>train()</code> is responsible for training the network in batches for one epoch, and in its epoch loop we want to perform compression.   The <a href="https://github.com/NervanaSystems/distiller/blob/master/distiller/scheduler.py">CompressionScheduler</a> invokes <a href="https://github.com/NervanaSystems/distiller/blob/master/distiller/policy.py">ScheduledTrainingPolicy</a> instances per the scheduling specification that was programmed in the <code>CompressionScheduler</code> instance.  There are four main <code>SchedulingPolicy</code> types: <code>PruningPolicy</code>, <code>RegularizationPolicy</code>, <code>LRPolicy</code>, and <code>QuantizationPolicy</code>.  We'll be using <code>PruningPolicy</code>, which is triggered <code>on_epoch_begin</code> (to invoke the <a href="https://github.com/NervanaSystems/distiller/blob/master/distiller/pruning/pruner.py">Pruners</a>, and <code>on_minibatch_begin</code> (to mask the weights).   Later we will create a YAML scheduling file, and specify the schedule of <a href="https://github.com/NervanaSystems/distiller/blob/master/distiller/pruning/automated_gradual_pruner.py">AutomatedGradualPruner</a> instances.  </p>
+<p>Because we are writing a single application, which can be used with various Policies in the future (e.g. group-lasso regularization), we should add code to invoke all of the <code>CompressionScheduler</code>'s callbacks, not just the mandatory <code>on_epoch_begin</code> callback.    We invoke <code>on_minibatch_begin</code> before running the forward-pass, <code>before_backward_pass</code> after computing the loss, and <code>on_minibatch_end</code> after completing the backward-pass.</p>
+<pre><code class="lang-python">
+def train(epoch, optimizer, compression_scheduler=None):
+    ...
+
+    # The line below was fixed as per: https://github.com/pytorch/examples/issues/214
+    for batch, i in enumerate(range(0, train_data.size(0), args.bptt)):
+        data, targets = get_batch(train_data, i)
+        # Starting each batch, we detach the hidden state from how it was previously produced.
+        # If we didn't, the model would try backpropagating all the way to start of the dataset.
+        hidden = repackage_hidden(hidden)
+
+        <b>if compression_scheduler:
+            compression_scheduler.on_minibatch_begin(epoch, minibatch_id=batch, minibatches_per_epoch=steps_per_epoch)</b>
+        output, hidden = model(data, hidden)
+        loss = criterion(output.view(-1, ntokens), targets)
+
+        <b>if compression_scheduler:
+            compression_scheduler.before_backward_pass(epoch, minibatch_id=batch,
+                                                       minibatches_per_epoch=steps_per_epoch,
+                                                       loss=loss)</b>
+        optimizer.zero_grad()
+        loss.backward()
+
+        # `clip_grad_norm` helps prevent the exploding gradient problem in RNNs / LSTMs.
+        torch.nn.utils.clip_grad_norm_(model.parameters(), args.clip)
+        optimizer.step()
+
+        total_loss += loss.item()
+
+        <b>if compression_scheduler:
+            compression_scheduler.on_minibatch_end(epoch, minibatch_id=batch, minibatches_per_epoch=steps_per_epoch)</b>
+</code></pre>
+
+<p>The rest of the code could stay as in the original PyTorch sample, but I wanted to use an SGD optimizer, so I replaced:</p>
+<pre><code class="python">for p in model.parameters():
+    p.data.add_(-lr, p.grad.data)
+</code></pre>
+
+<p>with:</p>
+<pre><code>optimizer.step()
+</code></pre>
+
+<p>The rest of the code in function <code>train()</code> logs to a text file and a <a href="https://www.tensorflow.org/programmers_guide/summaries_and_tensorboard">TensorBoard</a> backend.  Again, such code is not mandatory, but a few lines give us a lot of visibility: we have training progress information saved to log, and we can monitor the training progress in realtime on TensorBoard.  That's a lot for a few lines of code ;-)</p>
+<pre><code>
+if batch % args.log_interval == 0 and batch > 0:
+    cur_loss = total_loss / args.log_interval
+    elapsed = time.time() - start_time
+    lr = optimizer.param_groups[0]['lr']
+    msglogger.info(
+            '| epoch {:3d} | {:5d}/{:5d} batches | lr {:02.4f} | ms/batch {:5.2f} '
+            '| loss {:5.2f} | ppl {:8.2f}'.format(
+        epoch, batch, len(train_data) // args.bptt, lr,
+        elapsed * 1000 / args.log_interval, cur_loss, math.exp(cur_loss)))
+    total_loss = 0
+    start_time = time.time()
+    stats = ('Peformance/Training/',
+        OrderedDict([
+            ('Loss', cur_loss),
+            ('Perplexity', math.exp(cur_loss)),
+            ('LR', lr),
+            ('Batch Time', elapsed * 1000)])
+        )
+    steps_completed = batch + 1
+    distiller.log_training_progress(stats, model.named_parameters(), epoch, steps_completed,
+                                    steps_per_epoch, args.log_interval, [tflogger])
+</code></pre>
+
+<p>Finally we get to the outer training-loop which loops on <code>args.epochs</code>.  We add the two final <code>CompressionScheduler</code> callbacks: <code>on_epoch_begin</code>, at the start of the loop, and <code>on_epoch_end</code> after running <code>evaluate</code> on the model and updating the learning-rate.</p>
+<pre><code class="lang-python">
+try:
+    for epoch in range(0, args.epochs):
+        epoch_start_time = time.time()
+        <b>if compression_scheduler:
+            compression_scheduler.on_epoch_begin(epoch)</b>
+
+        train(epoch, optimizer, compression_scheduler)
+        val_loss = evaluate(val_data)
+        lr_scheduler.step(val_loss)
+
+        <b>if compression_scheduler:
+            compression_scheduler.on_epoch_end(epoch)</b>
+</code></pre>
+
+<p>And that's it!  The language model sample is ready for compression.  </p>
+<h2 id="creating-compression-baselines">Creating compression baselines</h2>
+<p>In <a href="https://arxiv.org/abs/1710.01878">To prune, or not to prune: exploring the efficacy of pruning for model compression</a> Zhu and Gupta, "compare the accuracy of large, but pruned models (large-sparse) and their smaller, but dense (small-dense) counterparts with identical memory footprint." They also "propose a new gradual pruning technique that is simple and straightforward to apply across a variety of models/datasets with minimal tuning."<br />
+This pruning schedule is implemented by distiller.AutomatedGradualPruner (AGP), which increases the sparsity level (expressed as a percentage of zero-valued elements) gradually over several pruning steps. Distiller's implementation only prunes elements once in an epoch (the model is fine-tuned in between pruning events), which is a small deviation from Zhu and Gupta's paper. The research paper specifies the schedule in terms of mini-batches, while our implementation specifies the schedule in terms of epochs. We feel that using epochs performs well, and is more "stable", since the number of mini-batches will change, if you change the batch size.</p>
+<p>Before we start compressing stuff ;-), we need to create baselines so we have something to benchmark against.  Let's prepare small, medium, and large baseline models, like Table 3 of <em>To prune, or Not to Prune</em>.  These will provide baseline perplexity results that we'll compare the compressed models against.  <br />
+I chose to use tied input/output embeddings, and constrained the training to 40 epochs.  The table below shows the model sizes, where we are interested in the tied version (biases are ignored due to their small size and because we don't prune them).</p>
+<table>
+<thead>
+<tr>
+<th>Size</th>
+<th>Number of Weights (untied)</th>
+<th>Number of Weights (tied)</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Small</td>
+<td>13,951,200</td>
+<td>7,295,600</td>
+</tr>
+<tr>
+<td>Medium</td>
+<td>50,021,400</td>
+<td>28,390,700</td>
+</tr>
+<tr>
+<td>Large</td>
+<td>135,834,000</td>
+<td>85,917,000</td>
+</tr>
+</tbody>
+</table>
+<p>I started experimenting with the optimizer setup like in the PyTorch example, but I added some L2 regularization when I noticed that the training was overfitting.  The two right columns show the perplexity results (lower is better) of each of the models with no L2 regularization and with 1e-5 and 1e-6.
+In all three model sizes using the smaller L2 regularization (1e-6) gave the best results.  BTW, I'm not showing here experiments with even lower regularization because that did not help.</p>
+<table>
+<thead>
+<tr>
+<th>Type</th>
+<th>Command line</th>
+<th>Validation</th>
+<th>Test</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Small</td>
+<td>time python3 main.py --cuda --epochs 40 --tied</td>
+<td>105.23</td>
+<td>99.53</td>
+</tr>
+<tr>
+<td>Small</td>
+<td>time python3 main.py --cuda --epochs 40 --tied --wd=1e-6</td>
+<td>101.13</td>
+<td>96.29</td>
+</tr>
+<tr>
+<td>Small</td>
+<td>time python3 main.py --cuda --epochs 40 --tied --wd=1e-5</td>
+<td>109.49</td>
+<td>103.53</td>
+</tr>
+<tr>
+<td>Medium</td>
+<td>time python3 main.py --cuda --emsize 650 --nhid 650 --dropout 0.5 --epochs 40 --tied</td>
+<td>90.93</td>
+<td>86.20</td>
+</tr>
+<tr>
+<td>Medium</td>
+<td>time python3 main.py --cuda --emsize 650 --nhid 650 --dropout 0.5 --epochs 40 --tied --wd=1e-6</td>
+<td>88.17</td>
+<td>84.21</td>
+</tr>
+<tr>
+<td>Medium</td>
+<td>time python3 main.py --cuda --emsize 650 --nhid 650 --dropout 0.5 --epochs 40 --tied --wd=1e-5</td>
+<td>97.75</td>
+<td>93.06</td>
+</tr>
+<tr>
+<td>Large</td>
+<td>time python3 main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --tied</td>
+<td>88.23</td>
+<td>84.21</td>
+</tr>
+<tr>
+<td>Large</td>
+<td>time python3 main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --tied --wd=1e-6</td>
+<td>87.49</td>
+<td>83.85</td>
+</tr>
+<tr>
+<td>Large</td>
+<td>time python3 main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --tied --wd=1e-5</td>
+<td>99.22</td>
+<td>94.28</td>
+</tr>
+</tbody>
+</table>
+<h2 id="compressing-the-language-model">Compressing the language model</h2>
+<p>OK, so now let's recreate the results of the language model experiment from section 4.2 of paper.  We're using PyTorch's sample, so the language model we implement is not exactly like the one in the AGP paper (and uses a different dataset), but it's close enough, so if everything goes well, we should see similar compression results.</p>
+<h3 id="what-are-we-compressing">What are we compressing?</h3>
+<p>To gain insight about the model parameters, we can use the command-line to produce a weights-sparsity table:</p>
+<pre><code class="csh">$ python3 main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --tied --summary=sparsity
+
+Parameters:
++---------+------------------+---------------+---------------+----------------+------------+------------+----------+----------+----------+------------+---------+----------+------------+
+|         | Name             | Shape         |   NNZ (dense) |   NNZ (sparse) |   Cols (%) |   Rows (%) |   Ch (%) |   2D (%) |   3D (%) |   Fine (%) |     Std |     Mean |   Abs-Mean |
+|---------+------------------+---------------+---------------+----------------+------------+------------+----------+----------+----------+------------+---------+----------+------------|
+| 0.00000 | encoder.weight   | (33278, 1500) |      49917000 |       49916999 |    0.00000 |    0.00000 |        0 |  0.00000 |        0 |    0.00000 | 0.05773 | -0.00000 |    0.05000 |
+| 1.00000 | rnn.weight_ih_l0 | (6000, 1500)  |       9000000 |        9000000 |    0.00000 |    0.00000 |        0 |  0.00000 |        0 |    0.00000 | 0.01491 |  0.00001 |    0.01291 |
+| 2.00000 | rnn.weight_hh_l0 | (6000, 1500)  |       9000000 |        8999999 |    0.00000 |    0.00000 |        0 |  0.00000 |        0 |    0.00001 | 0.01491 |  0.00000 |    0.01291 |
+| 3.00000 | rnn.weight_ih_l1 | (6000, 1500)  |       9000000 |        8999999 |    0.00000 |    0.00000 |        0 |  0.00000 |        0 |    0.00001 | 0.01490 | -0.00000 |    0.01291 |
+| 4.00000 | rnn.weight_hh_l1 | (6000, 1500)  |       9000000 |        9000000 |    0.00000 |    0.00000 |        0 |  0.00000 |        0 |    0.00000 | 0.01491 | -0.00000 |    0.01291 |
+| 5.00000 | decoder.weight   | (33278, 1500) |      49917000 |       49916999 |    0.00000 |    0.00000 |        0 |  0.00000 |        0 |    0.00000 | 0.05773 | -0.00000 |    0.05000 |
+| 6.00000 | Total sparsity:  | -             |     135834000 |      135833996 |    0.00000 |    0.00000 |        0 |  0.00000 |        0 |    0.00000 | 0.00000 |  0.00000 |    0.00000 |
++---------+------------------+---------------+---------------+----------------+------------+------------+----------+----------+----------+------------+---------+----------+------------+
+Total sparsity: 0.00
+</code></pre>
+
+<p>So what's going on here?
+<code>encoder.weight</code> and <code>decoder.weight</code> are the input and output embeddings, respectively.  Remember that in the configuration I chose for the three model sizes these embeddings are tied, which means that we only have one copy of parameters, that is shared between the encoder and decoder.
+We also have two pairs of RNN (LSTM really) parameters.  There is a pair because the model uses the command-line argument <code>args.nlayers</code> to decide how many instances of RNN (or LSTM or GRU) cells to use, and it defaults to 2.  The recurrent cells are LSTM cells, because this is the default of <code>args.model</code>, which is used in the initialization of <code>RNNModel</code>.  Let's look at the parameters of the first RNN: <code>rnn.weight_ih_l0</code> and <code>rnn.weight_hh_l0</code>: what are these?<br />
+Recall the <a href="https://pytorch.org/docs/stable/nn.html#lstm">LSTM equations</a> that PyTorch implements.  In the equations, there are 8 instances of vector-matrix multiplication (when batch=1).  These can be combined into a single matrix-matrix multiplication (GEMM), but PyTorch groups these into two GEMM operations: one GEMM multiplies the inputs (<code>rnn.weight_ih_l0</code>), and the other multiplies the hidden-state (<code>rnn.weight_hh_l0</code>).  </p>
+<h3 id="how-are-we-compressing">How are we compressing?</h3>
+<p>Let's turn to the configurations of the Large language model compression schedule to 70%, 80%, 90% and 95% sparsity. Using AGP it is easy to configure the pruning schedule to produce an exact sparsity of the compressed model.  I'll use the <a href="https://github.com/NervanaSystems/distiller/blob/master/examples/agp-pruning/word_lang_model.LARGE_70.schedule_agp.yaml">70% schedule</a> to show a concrete example.</p>
+<p>The YAML file has two sections: <code>pruners</code> and <code>policies</code>.  Section <code>pruners</code> defines instances of <code>ParameterPruner</code> - in our case we define three instances of <code>AutomatedGradualPruner</code>: for the weights of the first RNN (<code>l0_rnn_pruner</code>), the second RNN (<code>l1_rnn_pruner</code>) and the embedding layer (<code>embedding_pruner</code>).  These names are arbitrary, and serve are name-handles which bind Policies to Pruners - so you can use whatever names you want.
+Each <code>AutomatedGradualPruner</code> is configured with an <code>initial_sparsity</code> and <code>final_sparsity</code>.  For examples, the <code>l0_rnn_pruner</code> below is configured to prune 5% of the weights as soon as it starts working, and finish when 70% of the weights have been pruned.  The <code>weights</code> parameter tells the Pruner which weight tensors to prune.</p>
+<pre><code class="YAML">pruners:
+  l0_rnn_pruner:
+    class: AutomatedGradualPruner
+    initial_sparsity : 0.05
+    final_sparsity: 0.70
+    weights: [rnn.weight_ih_l0, rnn.weight_hh_l0]
+
+  l1_rnn_pruner:
+    class: AutomatedGradualPruner
+    initial_sparsity : 0.05
+    final_sparsity: 0.70
+    weights: [rnn.weight_ih_l1, rnn.weight_hh_l1]
+
+  embedding_pruner:
+    class: AutomatedGradualPruner
+    initial_sparsity : 0.05
+    final_sparsity: 0.70
+    weights: [encoder.weight]
+</code></pre>
+
+<h3 id="when-are-we-compressing">When are we compressing?</h3>
+<p>If the <code>pruners</code> section defines "what-to-do", the <code>policies</code> section defines "when-to-do".  This part is harder, because we define the pruning schedule, which requires us to try a few different schedules until we understand which schedule works best.
+Below we define three <a href="https://github.com/NervanaSystems/distiller/blob/master/distiller/policy.py#L63:L87">PruningPolicy</a> instances.  The first two instances start operating at epoch 2 (<code>starting_epoch</code>), end at epoch 20 (<code>ending_epoch</code>), and operate once every epoch (<code>frequency</code>; as I explained above, Distiller's Pruning scheduling operates only at <code>on_epoch_begin</code>).  In between pruning operations, the pruned model is fine-tuned.</p>
+<pre><code class="YAML">policies:
+  - pruner:
+      instance_name : l0_rnn_pruner
+    starting_epoch: 2
+    ending_epoch: 20  
+    frequency: 1
+
+  - pruner:
+      instance_name : l1_rnn_pruner
+    starting_epoch: 2
+    ending_epoch: 20
+    frequency: 1
+
+  - pruner:
+      instance_name : embedding_pruner
+    starting_epoch: 3
+    ending_epoch: 21
+    frequency: 1
+</code></pre>
+
+<p>We invoke the compression as follows:</p>
+<pre><code>$ time python3 main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --tied --compress=../../examples/agp-pruning/word_lang_model.LARGE_70.schedule_agp.yaml
+</code></pre>
+
+<p><a href="https://github.com/NervanaSystems/distiller/wiki/Tutorial%3A-Pruning-a-PyTorch-language-model/_edit#table-1-agp-language-model-pruning-results">Table 1</a> above shows that we can make a negligible improvement when adding L2 regularization.  I did some experimenting with the sparsity distribution between the layers, and the scheduling frequency and noticed that the embedding layers are much less sensitive to pruning than the RNN cells.  I didn't notice any difference between the RNN cells, but I also didn't invest in this exploration.
+A new <a href="https://github.com/NervanaSystems/distiller/blob/master/examples/agp-pruning/word_lang_model.LARGE_70B.schedule_agp.yaml">70% sparsity schedule</a>, prunes the RNNs only to 50% sparsity, but prunes the embedding to 85% sparsity, and achieves almost a 3 points improvement in the test perplexity results.</p>
+<p>We provide <a href="https://github.com/NervanaSystems/distiller/tree/master/examples/agp-pruning">similar pruning schedules</a> for the other compression rates.</p>
+<h2 id="until-next-time">Until next time</h2>
+<p>This concludes the first part of the tutorial on pruning a PyTorch language model.<br />
+In the next installment, I'll explain how we added an implementation of Baidu Research's <a href="https://arxiv.org/abs/1704.05119">Exploring Sparsity in Recurrent Neural Networks</a> paper, and applied to this language model.</p>
+<p>Geek On.</p>
+              
+            </div>
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+      
+        <a href="../tutorial-struct_pruning/index.html" class="btn btn-neutral" title="Pruning Filters and Channels"><span class="icon icon-circle-arrow-left"></span> Previous</a>
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <!-- Copyright etc -->
+    
+  </div>
+
+  Built with <a href="http://www.mkdocs.org">MkDocs</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
+</footer>
+      
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+
+  <div class="rst-versions" role="note" style="cursor: pointer">
+    <span class="rst-current-version" data-toggle="rst-current-version">
+      
+      
+        <span><a href="../tutorial-struct_pruning/index.html" style="color: #fcfcfc;">&laquo; Previous</a></span>
+      
+      
+    </span>
+</div>
+    <script>var base_url = '..';</script>
+    <script src="../js/theme.js"></script>
+      <script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script>
+      <script src="../search/require.js"></script>
+      <script src="../search/search.js"></script>
+
+</body>
+</html>
diff --git a/docs/tutorial-struct_pruning/index.html b/docs/tutorial-struct_pruning/index.html
new file mode 100644
index 0000000..680cf31
--- /dev/null
+++ b/docs/tutorial-struct_pruning/index.html
@@ -0,0 +1,312 @@
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  
+  <link rel="shortcut icon" href="../img/favicon.ico">
+  <title>Pruning Filters and Channels - Neural Network Distiller</title>
+  <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
+
+  <link rel="stylesheet" href="../css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../css/theme_extra.css" type="text/css" />
+  <link rel="stylesheet" href="../css/highlight.css">
+  <link href="../extra.css" rel="stylesheet">
+  
+  <script>
+    // Current page data
+    var mkdocs_page_name = "Pruning Filters and Channels";
+    var mkdocs_page_input_path = "tutorial-struct_pruning.md";
+    var mkdocs_page_url = "/tutorial-struct_pruning/index.html";
+  </script>
+  
+  <script src="../js/jquery-2.1.1.min.js"></script>
+  <script src="../js/modernizr-2.8.3.min.js"></script>
+  <script type="text/javascript" src="../js/highlight.pack.js"></script> 
+  
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
+      <div class="wy-side-nav-search">
+        <a href="../index.html" class="icon icon-home"> Neural Network Distiller</a>
+        <div role="search">
+  <form id ="rtd-search-form" class="wy-form" action="../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+  </form>
+</div>
+      </div>
+
+      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+	<ul class="current">
+	  
+          
+            <li class="toctree-l1">
+		
+    <a class="" href="../index.html">Home</a>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <a class="" href="../install/index.html">Installation</a>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <a class="" href="../usage/index.html">Usage</a>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <a class="" href="../schedule/index.html">Compression Scheduling</a>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <span class="caption-text">Compressing Models</span>
+    <ul class="subnav">
+                <li class="">
+                    
+    <a class="" href="../pruning/index.html">Pruning</a>
+                </li>
+                <li class="">
+                    
+    <a class="" href="../regularization/index.html">Regularization</a>
+                </li>
+                <li class="">
+                    
+    <a class="" href="../quantization/index.html">Quantization</a>
+                </li>
+                <li class="">
+                    
+    <a class="" href="../knowledge_distillation/index.html">Knowledge Distillation</a>
+                </li>
+                <li class="">
+                    
+    <a class="" href="../conditional_computation/index.html">Conditional Computation</a>
+                </li>
+    </ul>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <span class="caption-text">Algorithms</span>
+    <ul class="subnav">
+                <li class="">
+                    
+    <a class="" href="../algo_pruning/index.html">Pruning</a>
+                </li>
+                <li class="">
+                    
+    <a class="" href="../algo_quantization/index.html">Quantization</a>
+                </li>
+                <li class="">
+                    
+    <a class="" href="../algo_earlyexit/index.html">Early Exit</a>
+                </li>
+    </ul>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <a class="" href="../model_zoo/index.html">Model Zoo</a>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <a class="" href="../jupyter/index.html">Jupyter Notebooks</a>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <a class="" href="../design/index.html">Design</a>
+	    </li>
+          
+            <li class="toctree-l1">
+		
+    <span class="caption-text">Tutorials</span>
+    <ul class="subnav">
+                <li class=" current">
+                    
+    <a class="current" href="index.html">Pruning Filters and Channels</a>
+    <ul class="subnav">
+            
+    <li class="toctree-l3"><a href="#pruning-filters-channels">Pruning Filters &amp; Channels</a></li>
+    
+        <ul>
+        
+            <li><a class="toctree-l4" href="#introduction">Introduction</a></li>
+        
+            <li><a class="toctree-l4" href="#filter-pruning">Filter Pruning</a></li>
+        
+            <li><a class="toctree-l4" href="#channel-pruning">Channel Pruning</a></li>
+        
+        </ul>
+    
+
+    </ul>
+                </li>
+                <li class="">
+                    
+    <a class="" href="../tutorial-lang_model/index.html">Pruning a Language Model</a>
+                </li>
+    </ul>
+	    </li>
+          
+        </ul>
+      </div>
+      &nbsp;
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../index.html">Neural Network Distiller</a>
+      </nav>
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../index.html">Docs</a> &raquo;</li>
+    
+      
+        
+          <li>Tutorials &raquo;</li>
+        
+      
+    
+    <li>Pruning Filters and Channels</li>
+    <li class="wy-breadcrumbs-aside">
+      
+    </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main">
+            <div class="section">
+              
+                <h1 id="pruning-filters-channels">Pruning Filters &amp; Channels</h1>
+<h2 id="introduction">Introduction</h2>
+<p>Channel and filter pruning are examples of structured-pruning which create compressed models that do not require special hardware to execute.  This latter fact makes this form of structured pruning particularly interesting and popular.
+In networks that have serial data dependencies, it is pretty straight-forward to understand and define how to prune channels and filters.  However, in more complex models,  with parallel-data dependencies (paths) - such as ResNets (skip connections) and GoogLeNet (Inception layers) – things become increasingly more complex and require a deeper understanding of the data flow in the model, in order to define the pruning schedule.<br />
+This post explains channel and filter pruning, the challenges, and how to define a Distiller pruning schedule for these structures.  The details of the implementation are left for a separate post.</p>
+<p>Before we dive into pruning, let’s level-set on the terminology, because different people (and even research papers) do not always agree on the nomenclature.  This reflects my understanding of the nomenclature, and therefore these are the names used in Distiller.  I’ll restrict this discussion to Convolution layers in CNNs, to contain the scope of the topic I’ll be covering, although Distiller supports pruning of other structures such as matrix columns and rows.
+PyTorch describes <a href="https://pytorch.org/docs/stable/nn.html#conv2d"><code>torch.nn.Conv2d</code></a> as applying “a 2D convolution over an input signal composed of several input planes.”  We call each of these input planes a <strong>feature-map</strong> (or FM, for short).  Another name is <strong>input channel</strong>, as in the R/G/B channels of an image.  Some people refer to feature-maps as <strong>activations</strong> (i.e. the activation of neurons), although I think strictly speaking <strong>activations</strong> are the output of an activation layer that was fed a group of feature-maps.  Because it is very common, and because the use of an activation is orthogonal to our discussion, I will use <strong>activations</strong> to refer to the output of a Convolution layer (i.e. 3D stack of feature-maps).</p>
+<p>In the PyTorch documentation Convolution outputs have shape (N, C<sub>out</sub>, H<sub>out</sub>, W<sub>out</sub>) where N is a batch size, C<sub>out</sub> denotes a number of output channels, H<sub>out</sub> is a height of output planes in pixels, and W<sub>out</sub> is width in pixels.  We won’t be paying much attention to the batch-size since it’s not important to our discussion, so without loss of generality we can set N=1.  I’m also assuming the most common Convolutions having <code>groups==1</code>.
+Convolution weights are 4D: (F, C, K, K) where F is the number of filters, C is the number of channels, and K is the kernel size (we can assume the kernel height and width are equal for simplicity).  A <strong>kernel</strong> is a 2D matrix (K, K) that is part of a 3D feature detector.  This feature detector is called a <strong>filter</strong> and it is basically a stack of 2D <strong>kernels</strong>.  Each kernel is convolved with a 2D input channel (i.e. feature-map) so if there are C<sub>in</sub> channels in the input, then there are C<sub>in</sub> kernels in a filter (C == C<sub>in</sub>).  Each filter is convolved with the entire input to create a single output channel (i.e. feature-map).  If there are C<sub>out</sub> output channels, then there are C<sub>out</sub> filters (F == C<sub>out</sub>).</p>
+<h2 id="filter-pruning">Filter Pruning</h2>
+<p>Filter pruning and channel pruning are very similar, and I’ll expand on that similarity later on – but for now let’s focus on filter pruning.<br />
+In filter pruning we use some criterion to determine which filters are <strong>important</strong> and which are not.  Researchers came up with all sorts of pruning criteria: the L1-magnitude of the filters (citation), the entropy of the activations (citation), and the classification accuracy reduction (citation) are just some examples.  Disregarding how we chose the filters to prune, let’s imagine that in the diagram below, we chose to prune (remove) the green and orange filters (the circle with the “*” designates a Convolution operation).</p>
+<p>Since we have two less filters operating on the input, we must have two less output feature-maps.  So when we prune filters, besides changing the physical size of the weight tensors, we also need to reconfigure the immediate Convolution layer (change its <code>out_channels</code>) and the following Convolution layer (change its <code>in_channels</code>).  And finally, because the next layer’s input is now smaller (has fewer channels),  we should also shrink the next layer’s weights tensors, by removing the channels corresponding to the filters we pruned.  We say that there is a <strong>data-dependency</strong> between the two Convolution layers.  I didn’t make any mention of the activation function that usually follows Convolution, because these functions are parameter-less and are not sensitive to the shape of their input.
+There are some other dependencies that Distiller resolves (such as Optimizer parameters tightly-coupled to the weights) that I won’t discuss here, because they are implementation details.
+<center><img alt="Example 1" src="../imgs/pruning_structs_ex1.png" /></center></p>
+<p>The scheduler YAML syntax for this example is pasted below.  We use L1-norm ranking of weight filters, and the pruning-rate is set by the AGP algorithm (Automatic Gradual Pruning).  The Convolution layers are conveniently named <code>conv1</code> and <code>conv2</code> in this example.</p>
+<pre><code>pruners:
+  example_pruner:
+    class: L1RankedStructureParameterPruner_AGP
+    initial_sparsity : 0.10
+    final_sparsity: 0.50
+    group_type: Filters
+    weights: [module.conv1.weight]
+</code></pre>
+
+<p>Now let’s add a Batch Normalization layer between the two convolutions:
+<center><img alt="Example 2" src="../imgs/pruning_structs_ex2.png" /></center></p>
+<p>The Batch Normalization layer is parameterized by a couple of tensors that contain information per input-channel (i.e. scale and shift).  Because our Convolution produces less output FMs, and these are the input to the Batch Normalization layer, we also need to reconfigure the Batch Normalization layer.  And we also need to physically shrink the Batch Normalization layer’s scale and shift tensors, which are coefficients in the BN input transformation.  Moreover, the scale and shift coefficients that we remove from the tensors, must correspond to the filters (or output feature-maps channels) that we removed from the Convolution weight tensors.  This small nuance will prove to be a large pain, but we’ll get to that in later examples.
+The presence of a Batch Normalization layer in the example above is transparent to us, and in fact, the YAML schedule does not change.  Distiller detects the presence of Batch Normalization layers and adjusts their parameters automatically.</p>
+<p>Let’s look at another example, with non-serial data-dependencies.  Here, the output of <code>conv1</code> is the input for <code>conv2</code> and <code>conv3</code>.  This is an example of parallel data-dependency, since both <code>conv2</code> and <code>conv3</code> depend on <code>conv1</code>.
+<center><img alt="Example 3" src="../imgs/pruning_structs_ex3.png" /></center></p>
+<p>Note that the Distiller YAML schedule is unchanged from the previous two examples, since we are still only explicitly pruning the weight filters of <code>conv1</code>.  The weight channels of <code>conv2</code> and <code>conv3</code> are pruned implicitly by Distiller in a process called “Thinning” (on which I will expand in a different post).</p>
+<p>Next, let’s look at another example also involving three Convolutions, but this time we want to prune the filters of two convolutional layers, whose outputs are element-wise-summed and fed into a third Convolution.
+In this example <code>conv3</code> is dependent on both <code>conv1</code> and <code>conv2</code>, and there are two implications to this dependency.  The first, and more obvious implication, is that we need to prune the same number of filters from both <code>conv1</code> and <code>conv2</code>.  Since we apply element-wise addition on the outputs of <code>conv1</code> and <code>conv2</code>, they must have the same shape - and they can only have the same shape if <code>conv1</code> and <code>conv2</code> prune the same number of filters.  The second implication of this triangular data-dependency is that both <code>conv1</code> and <code>conv2</code> must prune the <strong>same</strong> filters!  Let’s imagine for a moment, that we ignore this second constraint.  The diagram below illustrates the dilemma that arises: how should we prune the channels of the weights of <code>conv3</code>?  Obviously, we can’t.
+<center><img alt="Example 4" src="../imgs/pruning_structs_ex4.png" /></center></p>
+<p>We must apply the second constraint – and that means that we now need to be proactive: we need to decide whether to use the prune <code>conv1</code> and <code>conv2</code> according to the filter-pruning choices of <code>conv1</code> or of <code>conv2</code>.  The diagram below illustrates the pruning scheme after deciding to follow the pruning choices of <code>conv1</code>.
+<center><img alt="Example 5" src="../imgs/pruning_structs_ex5.png" /></center></p>
+<p>The YAML compression schedule syntax needs to be able to express the two dependencies (or constraints) discussed above.  First we need to tell the Filter Pruner that we there is a dependency of type <strong>Leader</strong>.  This means that all of the tensors listed in the <code>weights</code> field are pruned together, to the same extent at each iteration, and that to prune the filters we will use the pruning decisions of the first tensor listed.  In the example below <code>module.conv1.weight</code> and <code>module.conv2.weight</code> are pruned together according to the pruning choices for <code>module.conv1.weight</code>.</p>
+<pre><code>pruners:
+  example_pruner:
+    class: L1RankedStructureParameterPruner_AGP
+    initial_sparsity : 0.10
+    final_sparsity: 0.50
+    group_type: Filters
+    group_dependency: Leader
+    weights: [module.conv1.weight, module.conv2.weight]
+</code></pre>
+
+<p>When we turn to filter-pruning ResNets we see some pretty long dependency chains because of the skip-connections.  If you don’t pay attention, you can easily under-specify (or mis-specify) dependency chains and Distiller will exit with an exception.  The exception does not explain the specification error and this needs to be improved.</p>
+<h2 id="channel-pruning">Channel Pruning</h2>
+<p>Channel pruning is very similar to Filter pruning with all the details of dependencies reversed.  Look again at example #1, but this time imagine that we’ve changed our schedule to prune the <strong>channels</strong> of <code>module.conv2.weight</code>.</p>
+<pre><code>pruners:
+  example_pruner:
+    class: L1RankedStructureParameterPruner_AGP
+    initial_sparsity : 0.10
+    final_sparsity: 0.50
+    group_type: Channels
+    weights: [module.conv2.weight]
+</code></pre>
+
+<p>As the diagram shows, <code>conv1</code> is now dependent on <code>conv2</code> and its weights filters will be implicitly pruned according to the channels removed from the weights of <code>conv2</code>.
+<center><img alt="Example 1" src="../imgs/pruning_structs_ex1.png" /></center></p>
+<p>Geek On.</p>
+              
+            </div>
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="../tutorial-lang_model/index.html" class="btn btn-neutral float-right" title="Pruning a Language Model">Next <span class="icon icon-circle-arrow-right"></span></a>
+      
+      
+        <a href="../design/index.html" class="btn btn-neutral" title="Design"><span class="icon icon-circle-arrow-left"></span> Previous</a>
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <!-- Copyright etc -->
+    
+  </div>
+
+  Built with <a href="http://www.mkdocs.org">MkDocs</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
+</footer>
+      
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+
+  <div class="rst-versions" role="note" style="cursor: pointer">
+    <span class="rst-current-version" data-toggle="rst-current-version">
+      
+      
+        <span><a href="../design/index.html" style="color: #fcfcfc;">&laquo; Previous</a></span>
+      
+      
+        <span style="margin-left: 15px"><a href="../tutorial-lang_model/index.html" style="color: #fcfcfc">Next &raquo;</a></span>
+      
+    </span>
+</div>
+    <script>var base_url = '..';</script>
+    <script src="../js/theme.js"></script>
+      <script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script>
+      <script src="../search/require.js"></script>
+      <script src="../search/search.js"></script>
+
+</body>
+</html>
-- 
GitLab