This example shows how to use PopTorch training and inference models that use Octave Convolutions as described in the paper: "Drop an Octave: Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution"
- Prepare the PopTorch environment. Install the Poplar SDK following the
Getting Started guide for your IPU system. Make sure to source the
enable.sh
scripts for Poplar and PopART and activate a Python virtualenv with PopTorch installed. - Install additional Python packages specified in requirements.txt
python3 -m pip install -r requirements
This will install an OctConv implementation for PyTorch from GitHub.
The file octconv_example.py implements a simple image classification model. This full example uses PopTorch to train the model and then evaluate it on the IPU with the CIFAR-10 dataset. The classification model can be configured to use one of the following convolution modes:
vanilla
: the standardtorch.nn.Conv2d
implementation is used for all convolutions.octave
: use the Octave convolutionoctconv.OctConv2d
in place of all convolutions.multi-octave
: usespoptorch.MultiConv
to execute the data-parallel convolutions that make-up an Octave convolution in parallel.
The Octave convolutions are parameterized by the alpha
value which defines the ratio of low-frequency maps.
These options can be selected from the command-line:
python3 octconv_example.py --conv-mode octave --alpha 0.8
usage: octconv_example.py [-h] [--conv-mode {vanilla,octave,multi-octave}]
[--alpha ALPHA] [--batch-size BATCH_SIZE]
[--batches-per-step BATCHES_PER_STEP]
[--test-batch-size TEST_BATCH_SIZE]
[--epochs EPOCHS] [--lr LR]
[--profile-dir PROFILE_DIR] [--cache-dir CACHE_DIR]
[--data-dir DATA_DIR] [--expansion EXPANSION]
Octave Convolution in PopTorch
optional arguments:
-h, --help show this help message and exit
--conv-mode {vanilla,octave,multi-octave}
Convolution implementation used in the classification
model (default: vanilla)
--alpha ALPHA Ratio of low-frequency features used in octave
convolutions (default: 0.5)
--batch-size BATCH_SIZE
batch size for training (default: 8)
--batches-per-step BATCHES_PER_STEP
device iteration (default:50)
--test-batch-size TEST_BATCH_SIZE
batch size for testing (default: 80)
--epochs EPOCHS number of epochs to train (default: 10)
--lr LR learning rate (default: 0.05)
--profile-dir PROFILE_DIR
Perform a single iteration of training for profiling
and place in specified folder.
--cache-dir CACHE_DIR
Enable executable caching in the specified folder
--data-dir DATA_DIR Location to use for loading the CIFAR-10 dataset from.
--expansion EXPANSION
Expansion factor for tuning model width.