Nano User Guide

1. Overview

BigDL Nano is a Python package to transparently accelerate PyTorch and TensorFlow applications on Intel hardware. It provides a unified and easy-to-use API for several optimization techniques and tools, so that users can only apply a few lines of code changes to make their PyTorch or TensorFlow code run faster.


2. Install

Note: For windows users, we recommend using Windows Subsystem for Linux 2 (WSL2) to run BigDL-Nano. Please refer here for instructions.

BigDL-Nano can be installed using pip and we recommend installing BigDL-Nano in a conda environment.

For PyTorch Users, you can install bigdl-nano along with some dependencies specific to PyTorch using the following commands.

conda create -n env
conda activate env
pip install bigdl-nano[pytorch]

For TensorFlow users, you can install bigdl-nano along with some dependencies specific to TensorFlow using the following commands.

conda create -n env
conda activate env
pip install bigdl-nano[tensorflow]

After installing bigdl-nano, you can run the following command to setup a few environment variables.

source bigdl-nano-init

The bigdl-nano-init scripts will export a few environment variable according to your hardware to maximize performance.

In a conda environment, source bigdl-nano-init will also be added to $CONDA_PREFIX/etc/conda/activate.d/, which will automaticly run when you activate your current environment.

In a pure pip environment, you need to run source bigdl-nano-init every time you open a new shell to get optimal performance and run source bigdl-nano-unset-env if you want to unset these environment variables.


3. Get Started

3.1 PyTorch

BigDL-Nano supports both PyTorch and PyTorch Lightning models and most optimizations require only changing a few “import” lines in your code and adding a few flags.

BigDL-Nano uses a extended version of PyTorch Lightning trainer for integrating our optimizations.

For example, if you are using a LightningModule, you can use the following code snippet to enable intel-extension-for-pytorch and multi-instance training.

from bigdl.nano.pytorch import Trainer
net = create_lightning_model()
train_loader = create_training_loader()
trainer = Trainer(max_epochs=1, use_ipex=True, num_processes=4)
trainer.fit(net, train_loader)

If you are using custom training loop, you can use the following code to enable intel-extension-for-pytorch, multi-instance training and other nano’s optimizations.

from bigdl.nano.pytorch import TorchNano

class MyNano(TorchNano):
    def train(...):
      # copy your train loop here and make a few changes
      ...

MyNano(use_ipex=True, num_processes=2).train()

For more details on the BigDL-Nano’s PyTorch usage, please refer to the PyTorch Training and PyTorch Inference page.

3.2 TensorFlow

BigDL-Nano supports tensorflow.keras API and most optimizations require only changing a few “import” lines in your code and adding a few flags.

BigDL-Nano uses a extended version of tf.keras.Model or tf.keras.Sequential for integrating our optimizations.

For example, you can conduct a multi-instance training using the following lines of code:

import tensorflow as tf
from bigdl.nano.tf.keras import Sequential
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5, num_processes=4)

For more details on the BigDL-Nano’s PyTorch usage, please refer to the TensorFlow Training and TensorFlow Inference page.