From 798345123f944ee99103502bfdd2de58b142ff77 Mon Sep 17 00:00:00 2001 From: Mingzhi Hu <49382651+y199387@users.noreply.github.com> Date: Mon, 4 Jul 2022 10:10:21 +0800 Subject: [PATCH] Nano: Update Nano PyTorch quick start doc (#4897) * add BigDL-Nano PyTorch Quickstart * Update BigDL-Nano PyTorch Quickstart * Update BigDL-Nano PyTorch Quickstart * Add Nano inference quickstart - add inference onnx quickstart - add inference openvino quickstart - add quantization inc quickstart - add quantization inc onnx quickstart - add quantization openvino quickstart * update quickstart * update quickstart * Add Nano quantization quickstart * update nano docs * Update docs * Update Nano OpenVINO tutorial * Update * Update index.md * Resize Images * Resize Images * Update * Update Nano docs * Update nano documents * Update doc & notebook * clear output of cells * add unit tests for tutorial notebooks * fix errors in yaml * fix error in notebook * reduce quantization time * Update yaml * Add unit test for tutorial * Add tests for tutorial * fix shell --- .../source/doc/Nano/Image/learning_rate.png | Bin 0 -> 155542 bytes .../source/doc/Nano/QuickStart/index.md | 53 +++++++ .../Nano/QuickStart/pytorch_onnxruntime.md | 89 ++++++++++++ .../doc/Nano/QuickStart/pytorch_openvino.md | 89 ++++++++++++ .../QuickStart/pytorch_quantization_inc.md | 88 ++++++++++++ .../pytorch_quantization_inc_onnx.md | 86 ++++++++++++ .../pytorch_quantization_openvino.md | 85 ++++++++++++ .../QuickStart/pytorch_train_quickstart.md | 129 ++++++++++++++++++ docs/readthedocs/source/index.rst | 1 + 9 files changed, 620 insertions(+) create mode 100644 docs/readthedocs/source/doc/Nano/Image/learning_rate.png create mode 100644 docs/readthedocs/source/doc/Nano/QuickStart/index.md create mode 100644 docs/readthedocs/source/doc/Nano/QuickStart/pytorch_onnxruntime.md create mode 100644 docs/readthedocs/source/doc/Nano/QuickStart/pytorch_openvino.md create mode 100644 docs/readthedocs/source/doc/Nano/QuickStart/pytorch_quantization_inc.md create mode 100644 docs/readthedocs/source/doc/Nano/QuickStart/pytorch_quantization_inc_onnx.md create mode 100644 docs/readthedocs/source/doc/Nano/QuickStart/pytorch_quantization_openvino.md create mode 100644 docs/readthedocs/source/doc/Nano/QuickStart/pytorch_train_quickstart.md diff --git a/docs/readthedocs/source/doc/Nano/Image/learning_rate.png b/docs/readthedocs/source/doc/Nano/Image/learning_rate.png new file mode 100644 index 0000000000000000000000000000000000000000..19467db865aa678fed53be2cc0fd58b50a10b275 GIT binary patch literal 155542 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 z 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 ![](../../../../image/GitHub-Mark-32px.png)[View source on GitHub][Nano_pytorch_training] + + In this guide we will describe how to scale out PyTorch programs using Nano + +--------------------------- + +- [**BigDL-Nano PyTorch ONNXRuntime Acceleration Quickstart**](./pytorch_onnxruntime.html) + + > ![](../../../../image/GitHub-Mark-32px.png)[View source on GitHub][Nano_pytorch_onnxruntime] + + In this guide we will describe how to apply ONNXRuntime Acceleration on inference pipeline with the APIs delivered by BigDL-Nano + +--------------------------- + +- [**BigDL-Nano PyTorch OpenVINO Acceleration Quickstart**](./pytorch_openvino.html) + + > ![](../../../../image/GitHub-Mark-32px.png)[View source on GitHub][Nano_pytorch_openvino] + + In this guide we will describe how to apply OpenVINO Acceleration on inference pipeline with the APIs delivered by BigDL-Nano + +--------------------------- + +- [**BigDL-Nano PyTorch Quantization with INC Quickstart**](./pytorch_quantization_inc.html) + + > ![](../../../../image/GitHub-Mark-32px.png)[View source on GitHub][Nano_pytorch_Quantization_inc] + + In this guide we will describe how to obtain a quantized model with the APIs delivered by BigDL-Nano + +--------------------------- + +- [**BigDL-Nano PyTorch Quantization with ONNXRuntime accelerator Quickstart**](./pytorch_quantization_inc_onnx.html) + + > ![](../../../../image/GitHub-Mark-32px.png)[View source on GitHub][Nano_pytorch_quantization_inc_onnx] + + In this guide we will describe how to obtain a quantized model running inference in the ONNXRuntime engine with the APIs delivered by BigDL-Nano + +--------------------------- + +- [**BigDL-Nano PyTorch Quantization with POT Quickstart**](./pytorch_quantization_openvino.html) + + > ![](../../../../image/GitHub-Mark-32px.png)[View source on GitHub][Nano_pytorch_quantization_openvino] + + In this guide we will describe how to obtain a quantized model with the APIs delivered by BigDL-Nano + +[Nano_pytorch_training]: +[Nano_pytorch_onnxruntime]: +[Nano_pytorch_openvino]: +[Nano_pytorch_Quantization_inc]: +[Nano_pytorch_quantization_inc_onnx]: +[Nano_pytorch_quantization_openvino]: diff --git a/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_onnxruntime.md b/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_onnxruntime.md new file mode 100644 index 00000000..504f1e4f --- /dev/null +++ b/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_onnxruntime.md @@ -0,0 +1,89 @@ +# BigDL-Nano PyTorch ONNXRuntime Acceleration Quickstart + +**In this guide we will describe how to apply ONNXRuntime Acceleration on inference pipeline with the APIs delivered by BigDL-Nano in 4 simple steps** + +### **Step 0: Prepare Environment** +We recommend using [conda](https://docs.conda.io/projects/conda/en/latest/user-guide/install/) to prepare the environment. Please refer to the [install guide](../../UserGuide/python.md) for more details. + +```bash +conda create py37 python==3.7.10 setuptools==58.0.4 +conda activate py37 +# nightly bulit version +pip install --pre --upgrade bigdl-nano[pytorch] +# set env variables for your conda environment +source bigdl-nano-init +``` + +Before you start with onnxruntime accelerator, you need to install some onnx packages as follows to set up your environment with ONNXRuntime acceleration. +```bash +pip install onnx onnxruntime +``` +### **Step 1: Load the data** +```python +import torch +from torchvision.io import read_image +from torchvision import transforms +from torchvision.datasets import OxfordIIITPet +from torch.utils.data.dataloader import DataLoader + +train_transform = transforms.Compose([transforms.Resize(256), + transforms.RandomCrop(224), + transforms.RandomHorizontalFlip(), + transforms.ColorJitter(brightness=.5, hue=.3), + transforms.ToTensor(), + transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]) +val_transform = transforms.Compose([transforms.Resize([224, 224]), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]) +# Apply data augmentation to the tarin_dataset +train_dataset = OxfordIIITPet(root = ".", transform=train_transform) +val_dataset = OxfordIIITPet(root=".", transform=val_transform) +# obtain training indices that will be used for validation +indices = torch.randperm(len(train_dataset)) +val_size = len(train_dataset) // 4 +train_dataset = torch.utils.data.Subset(train_dataset, indices[:-val_size]) +val_dataset = torch.utils.data.Subset(val_dataset, indices[-val_size:]) +# prepare data loaders +train_dataloader = DataLoader(train_dataset, batch_size=32) +``` + +### **Step 2: Prepare the Model** +```python +import torch +from torchvision.models import resnet18 +from bigdl.nano.pytorch import Trainer +model_ft = resnet18(pretrained=True) +num_ftrs = model_ft.fc.in_features + +# Here the size of each output sample is set to 37. +model_ft.fc = torch.nn.Linear(num_ftrs, 37) +loss_ft = torch.nn.CrossEntropyLoss() +optimizer_ft = torch.optim.SGD(model_ft.parameters(), lr=0.01, momentum=0.9, weight_decay=5e-4) + +# Compile our model with loss function, optimizer. +model = Trainer.compile(model_ft, loss_ft, optimizer_ft) +trainer = Trainer(max_epochs=5) +trainer.fit(model, train_dataloader=train_dataloader) + +# Inference/Prediction +x = torch.stack([val_dataset[0][0], val_dataset[1][0]]) +model_ft.eval() +y_hat = model_ft(x) +y_hat.argmax(dim=1) +``` + +### **Step 3: Apply ONNXRumtime Acceleration** +When you're ready, you can simply append the following part to enable your ONNXRuntime acceleration. +```python +# trace your model as an ONNXRuntime model +# The argument `input_sample` is not required in the following cases: +# you have run `trainer.fit` before trace +# Model has `example_input_array` set +# Model is a LightningModule with any dataloader attached. +from bigdl.nano.pytorch import Trainer +ort_model = Trainer.trace(model_ft, accelerator="onnxruntime", input_sample=torch.rand(1, 3, 224, 224)) + +# The usage is almost the same with any PyTorch module +y_hat = ort_model(x) +y_hat.argmax(dim=1) +``` +- Note + `ort_model` is not trainable any more, so you can't use like trainer.fit(ort_model, dataloader) \ No newline at end of file diff --git a/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_openvino.md b/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_openvino.md new file mode 100644 index 00000000..80a78ba7 --- /dev/null +++ b/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_openvino.md @@ -0,0 +1,89 @@ +# BigDL-Nano PyTorch OpenVINO Acceleration Quickstart + +**In this guide we will describe how to apply OpenVINO Acceleration on inference pipeline with the APIs delivered by BigDL-Nano in 4 simple steps** + +### **Step 0: Prepare Environment** +We recommend using [conda](https://docs.conda.io/projects/conda/en/latest/user-guide/install/) to prepare the environment. Please refer to the [install guide](../../UserGuide/python.md) for more details. + +```bash +conda create py37 python==3.7.10 setuptools==58.0.4 +conda activate py37 +# nightly bulit version +pip install --pre --upgrade bigdl-nano[pytorch] +# set env variables for your conda environment +source bigdl-nano-init +``` + +To use OpenVINO acceleration, you have to install the OpenVINO toolkit: +```bash +pip install openvino-dev +``` + +### **Step 1: Load the data** +```python +import torch +from torchvision.io import read_image +from torchvision import transforms +from torchvision.datasets import OxfordIIITPet +from torch.utils.data.dataloader import DataLoader + +train_transform = transforms.Compose([transforms.Resize(256), + transforms.RandomCrop(224), + transforms.RandomHorizontalFlip(), + transforms.ColorJitter(brightness=.5, hue=.3), + transforms.ToTensor(), + transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]) +val_transform = transforms.Compose([transforms.Resize([224, 224]), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]) +# Apply data augmentation to the tarin_dataset +train_dataset = OxfordIIITPet(root = ".", transform=train_transform, target_transform=transforms.Lambda(lambda label: torch.tensor(label, dtype=torch.long))) # Quantization using POT expect a tensor as label for now +val_dataset = OxfordIIITPet(root=".", transform=val_transform) +# obtain training indices that will be used for validation +indices = torch.randperm(len(train_dataset)) +val_size = len(train_dataset) // 4 +train_dataset = torch.utils.data.Subset(train_dataset, indices[:-val_size]) +val_dataset = torch.utils.data.Subset(val_dataset, indices[-val_size:]) +# prepare data loaders +train_dataloader = DataLoader(train_dataset, batch_size=32) +``` + +### **Step 2: Prepare the Model** +```python +import torch +from torchvision.models import resnet18 +from bigdl.nano.pytorch import Trainer +model_ft = resnet18(pretrained=True) +num_ftrs = model_ft.fc.in_features + +# Here the size of each output sample is set to 37. +model_ft.fc = torch.nn.Linear(num_ftrs, 37) +loss_ft = torch.nn.CrossEntropyLoss() +optimizer_ft = torch.optim.SGD(model_ft.parameters(), lr=0.01, momentum=0.9, weight_decay=5e-4) + +# Compile our model with loss function, optimizer. +model = Trainer.compile(model_ft, loss_ft, optimizer_ft) +trainer = Trainer(max_epochs=5) +trainer.fit(model, train_dataloader=train_dataloader) + +# Inference/Prediction +x = torch.stack([val_dataset[0][0], val_dataset[1][0]]) +model_ft.eval() +y_hat = model_ft(x) +y_hat.argmax(dim=1) +``` + +### **Step 3: Apply OpenVINO Acceleration** +When you're ready, you can simply append the following part to enable your OpenVINO acceleration. +```python +# trace your model as an OpenVINO model +# The argument `input_sample` is not required in the following cases: +# you have run `trainer.fit` before trace +# The Model has `example_input_array` set +from bigdl.nano.pytorch import Trainer +ov_model = Trainer.trace(model_ft, accelerator="openvino", input_sample=torch.rand(1, 3, 224, 224)) + +# The usage is almost the same with any PyTorch module +y_hat = ov_model(x) +y_hat.argmax(dim=1) +``` +- Note + The `ov_model` is not trainable any more, so you can't use like trainer.fit(ov_model, dataloader) \ No newline at end of file diff --git a/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_quantization_inc.md b/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_quantization_inc.md new file mode 100644 index 00000000..1f7c443c --- /dev/null +++ b/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_quantization_inc.md @@ -0,0 +1,88 @@ +# BigDL-Nano PyTorch Quantization with INC Quickstart + +**In this guide we will describe how to obtain a quantized model with the APIs delivered by BigDL-Nano in 4 simple steps** + +### **Step 0: Prepare Environment** +We recommend using [conda](https://docs.conda.io/projects/conda/en/latest/user-guide/install/) to prepare the environment. Please refer to the [install guide](../../UserGuide/python.md) for more details. + +```bash +conda create py37 python==3.7.10 setuptools==58.0.4 +conda activate py37 +# nightly bulit version +pip install --pre --upgrade bigdl-nano[pytorch] +# set env variables for your conda environment +source bigdl-nano-init +``` + +By default, Intel Neural Compressor is not installed with BigDL-Nano. So if you determine to use it as your quantization backend, you'll need to install it first: +```bash +pip install neural-compressor==1.11 +``` +### **Step 1: Load the data** +```python +import torch +from torchvision.io import read_image +from torchvision import transforms +from torchvision.datasets import OxfordIIITPet +from torch.utils.data.dataloader import DataLoader + +train_transform = transforms.Compose([transforms.Resize(256), + transforms.RandomCrop(224), + transforms.RandomHorizontalFlip(), + transforms.ColorJitter(brightness=.5, hue=.3), + transforms.ToTensor(), + transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]) +val_transform = transforms.Compose([transforms.Resize([224, 224]), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]) +# Apply data augmentation to the tarin_dataset +train_dataset = OxfordIIITPet(root = ".", transform=train_transform) +val_dataset = OxfordIIITPet(root=".", transform=val_transform) + +# obtain training indices that will be used for validation +indices = torch.randperm(len(train_dataset)) +val_size = len(train_dataset) // 4 +train_dataset = torch.utils.data.Subset(train_dataset, indices[:-val_size]) +val_dataset = torch.utils.data.Subset(val_dataset, indices[-val_size:]) + +# prepare data loaders +train_dataloader = DataLoader(train_dataset, batch_size=32) +``` + +### **Step 2: Prepare the Model** +```python +import torch +from torchvision.models import resnet18 +from bigdl.nano.pytorch import Trainer +from torchmetrics import Accuracy +model_ft = resnet18(pretrained=True) +num_ftrs = model_ft.fc.in_features + +# Here the size of each output sample is set to 37. +model_ft.fc = torch.nn.Linear(num_ftrs, 37) +loss_ft = torch.nn.CrossEntropyLoss() +optimizer_ft = torch.optim.SGD(model_ft.parameters(), lr=0.01, momentum=0.9, weight_decay=5e-4) + +# Compile our model with loss function, optimizer. +model = Trainer.compile(model_ft, loss_ft, optimizer_ft, metrics=[Accuracy]) +trainer = Trainer(max_epochs=5) +trainer.fit(model, train_dataloader=train_dataloader) + +# Inference/Prediction +x = torch.stack([val_dataset[0][0], val_dataset[1][0]]) +model_ft.eval() +y_hat = model_ft(x) +y_hat.argmax(dim=1) +``` + +### **Step 3: Quantization using Intel Neural Compressor** +Quantization is widely used to compress models to a lower precision, which not only reduces the model size but also accelerates inference. BigDL-Nano provides `Trainer.quantize()` API for users to quickly obtain a quantized model with accuracy control by specifying a few arguments. + +Without extra accelerator, `Trainer.quantize()` returns a pytorch module with desired precision and accuracy. You can add quantization as below: +```python +from torchmetrics.functional import accuracy +q_model = trainer.quantize(model, calib_dataloader=train_dataloader, metric=accuracy) + +# run simple prediction +y_hat = q_model(x) +y_hat.argmax(dim=1) +``` +This is a most basic usage to quantize a model with defaults, INT8 precision, and without search tuning space to control accuracy drop. \ No newline at end of file diff --git a/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_quantization_inc_onnx.md b/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_quantization_inc_onnx.md new file mode 100644 index 00000000..16cb1116 --- /dev/null +++ b/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_quantization_inc_onnx.md @@ -0,0 +1,86 @@ +# BigDL-Nano PyTorch Quantization with ONNXRuntime accelerator Quickstart + +**In this guide we will describe how to obtain a quantized model running inference in the ONNXRuntime engine with the APIs delivered by BigDL-Nano in 4 simple steps** + +### **Step 0: Prepare Environment** +We recommend using [conda](https://docs.conda.io/projects/conda/en/latest/user-guide/install/) to prepare the environment. Please refer to the [install guide](../../UserGuide/python.md) for more details. + +```bash +conda create py37 python==3.7.10 setuptools==58.0.4 +conda activate py37 +# nightly bulit version +pip install --pre --upgrade bigdl-nano[pytorch] +# set env variables for your conda environment +source bigdl-nano-init +``` + +To quantize model using ONNXRuntime as backend, it is required to install Intel Neural Compressor, onnxruntime-extensions as a dependency of INC and some onnx packages as below +```python +pip install neural-compress==1.11 +pip install onnx onnxruntime onnxruntime-extensions +``` +### **Step 1: Load the data** +```python +import torch +from torchvision.io import read_image +from torchvision import transforms +from torchvision.datasets import OxfordIIITPet +from torch.utils.data.dataloader import DataLoader + +train_transform = transforms.Compose([transforms.Resize(256), + transforms.RandomCrop(224), + transforms.RandomHorizontalFlip(), + transforms.ColorJitter(brightness=.5, hue=.3), + transforms.ToTensor(), + transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]) +val_transform = transforms.Compose([transforms.Resize([224, 224]), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]) +# Apply data augmentation to the tarin_dataset +train_dataset = OxfordIIITPet(root = ".", transform=train_transform) +val_dataset = OxfordIIITPet(root=".", transform=val_transform) +# obtain training indices that will be used for validation +indices = torch.randperm(len(train_dataset)) +val_size = len(train_dataset) // 4 +train_dataset = torch.utils.data.Subset(train_dataset, indices[:-val_size]) +val_dataset = torch.utils.data.Subset(val_dataset, indices[-val_size:]) + +train_dataloader = DataLoader(train_dataset, batch_size=32) +``` + +### **Step 2: Prepare your Model** +```python +import torch +from torchvision.models import resnet18 +from bigdl.nano.pytorch import Trainer +from torchmetrics import Accuracy +model_ft = resnet18(pretrained=True) +num_ftrs = model_ft.fc.in_features + +# Here the size of each output sample is set to 37. +model_ft.fc = torch.nn.Linear(num_ftrs, 37) +loss_ft = torch.nn.CrossEntropyLoss() +optimizer_ft = torch.optim.SGD(model_ft.parameters(), lr=0.01, momentum=0.9, weight_decay=5e-4) + +# Compile our model with loss function, optimizer. +model = Trainer.compile(model_ft, loss_ft, optimizer_ft, metrics=[Accuracy]) +trainer = Trainer(max_epochs=5) +trainer.fit(model, train_dataloader=train_dataloader) + +# Inference/Prediction +x = torch.stack([val_dataset[0][0], val_dataset[1][0]]) +model_ft.eval() +y_hat = model_ft(x) +y_hat.argmax(dim=1) +``` + +### **Step 3: Quantization with ONNXRuntime accelerator** +With the ONNXRuntime accelerator, `Trainer.quantize()` will return a model with compressed precision but running inference in the ONNXRuntime engine. + +you can add quantization as below: +```python +from torchmetrics.functional import accuracy +ort_q_model = trainer.quantize(model, accelerator='onnxruntime', calib_dataloader=train_dataloader, metric=accuracy) + +# run simple prediction +y_hat = ort_q_model(x) +y_hat.argmax(dim=1) +``` \ No newline at end of file diff --git a/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_quantization_openvino.md b/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_quantization_openvino.md new file mode 100644 index 00000000..e2afa8e7 --- /dev/null +++ b/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_quantization_openvino.md @@ -0,0 +1,85 @@ +# BigDL-Nano PyTorch Quantization with POT Quickstart + +**In this guide we will describe how to obtain a quantized model with the APIs delivered by BigDL-Nano in 4 simple steps** + +### **Step 0: Prepare Environment** +We recommend using [conda](https://docs.conda.io/projects/conda/en/latest/user-guide/install/) to prepare the environment. Please refer to the [install guide](../../UserGuide/python.md) for more details. + +```bash +conda create py37 python==3.7.10 setuptools==58.0.4 +conda activate py37 +# nightly bulit version +pip install --pre --upgrade bigdl-nano[pytorch] +# set env variables for your conda environment +source bigdl-nano-init +``` + +The POT(Post-training Optimization Tools) is provided by OpenVINO toolkit. To use POT, you need to install OpenVINO +```python +pip install openvino-dev +``` + +### **Step 1: Load the data** +```python +import torch +from torchvision.io import read_image +from torchvision import transforms +from torchvision.datasets import OxfordIIITPet +from torch.utils.data.dataloader import DataLoader + +train_transform = transforms.Compose([transforms.Resize(256), + transforms.RandomCrop(224), + transforms.RandomHorizontalFlip(), + transforms.ColorJitter(brightness=.5, hue=.3), + transforms.ToTensor(), + transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]) +val_transform = transforms.Compose([transforms.Resize([224, 224]), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]) +# Apply data augmentation to the tarin_dataset +train_dataset = OxfordIIITPet(root = ".", + transform=train_transform, + target_transform=transforms.Lambda(lambda label: torch.tensor(label, dtype=torch.long))) # Quantization using POT expect a tensor as label +val_dataset = OxfordIIITPet(root=".", transform=val_transform) +# obtain training indices that will be used for validation +indices = torch.randperm(len(train_dataset)) +val_size = len(train_dataset) // 4 +train_dataset = torch.utils.data.Subset(train_dataset, indices[:-val_size]) +val_dataset = torch.utils.data.Subset(val_dataset, indices[-val_size:]) +# prepare data loaders +train_dataloader = DataLoader(train_dataset, batch_size=32) +``` + +### **Step 2: Prepare the Model** +```python +import torch +from torchvision.models import resnet18 +from bigdl.nano.pytorch import Trainer +model_ft = resnet18(pretrained=True) +num_ftrs = model_ft.fc.in_features + +# Here the size of each output sample is set to 37. +model_ft.fc = torch.nn.Linear(num_ftrs, 37) +loss_ft = torch.nn.CrossEntropyLoss() +optimizer_ft = torch.optim.SGD(model_ft.parameters(), lr=0.01, momentum=0.9, weight_decay=5e-4) + +# Compile our model with loss function, optimizer. +model = Trainer.compile(model_ft, loss_ft, optimizer_ft) +trainer = Trainer(max_epochs=5) +trainer.fit(model, train_dataloader=train_dataloader) + +# Inference/Prediction +x = torch.stack([val_dataset[0][0], val_dataset[1][0]]) +model_ft.eval() +y_hat = model_ft(x) +y_hat.argmax(dim=1) +``` + +### **Step 3: Quantization using Post-training Optimization Tools** +Accelerator='openvino' means using OpenVINO POT to do quantization. The quantization can be added as below: +```python +from torchmetrics import Accuracy +ov_q_model = trainer.quantize(model, accelerator="openvino", calib_dataloader=data_loader) + +# run simple prediction +batch = torch.stack([data_set[0][0], data_set[1][0]]) +ov_q_model(batch) +``` \ No newline at end of file diff --git a/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_train_quickstart.md b/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_train_quickstart.md new file mode 100644 index 00000000..f009c3a7 --- /dev/null +++ b/docs/readthedocs/source/doc/Nano/QuickStart/pytorch_train_quickstart.md @@ -0,0 +1,129 @@ +# BigDL-Nano PyTorch Training Quickstart + +**In this guide we will describe how to scale out PyTorch programs using Nano in 5 simple steps** + +### **Step 0: Prepare Environment** + +We recommend using [conda](https://docs.conda.io/projects/conda/en/latest/user-guide/install/) to prepare the environment. Please refer to the [install guide](../../UserGuide/python.md) for more details. + +```bash +conda create py37 python==3.7.10 setuptools==58.0.4 +conda activate py37 +# nightly bulit version +pip install --pre --upgrade bigdl-nano[pytorch] +# set env variables for your conda environment +source bigdl-nano-init +pip install lightning-bolts +``` + +### **Step 1: Import BigDL-Nano** +The PyTorch Trainer (`bigdl.nano.pytorch.Trainer`) is the place where we integrate most optimizations. It extends PyTorch Lightning's Trainer and has a few more parameters and methods specific to BigDL-Nano. The Trainer can be directly used to train a `LightningModule`. +```python +from bigdl.nano.pytorch import Trainer +``` +Computer Vision task often needs a data processing pipeline that sometimes constitutes a non-trivial part of the whole training pipeline. Leveraging OpenCV and libjpeg-turbo, BigDL-Nano can accelerate computer vision data pipelines by providing a drop-in replacement of torch_vision's `datasets` and `transforms`. +```python +from bigdl.nano.pytorch.vision import transforms +``` + +### **Step 2: Load the Data** +You can define the datamodule using standard [LightningDataModule](https://pytorch-lightning.readthedocs.io/en/latest/data/datamodule.html) +```python +from pl_bolts.datamodules import CIFAR10DataModule +train_transforms = transforms.Compose( + [ + transforms.RandomCrop(32, 4), + transforms.RandomHorizontalFlip(), + transforms.ToTensor() + ] +) +cifar10_dm = CIFAR10DataModule( + data_dir=os.environ.get('DATA_PATH', '.'), + batch_size=64, + train_transforms=train_transforms +) +return cifar10_dm +``` + +### **Step 3: Define the Model** + +You may define your model, loss and optimizer in the same way as in any standard PyTorch Lightning program. + +```python +import torch +import torch.nn as nn +import torch.nn.functional as F +import torchvision +from pytorch_lightning import LightningModule + +def create_model(): + model = torchvision.models.resnet18(pretrained=False, num_classes=10) + model.conv1 = nn.Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) + model.maxpool = nn.Identity() + return model + +class LitResnet(LightningModule): + def __init__(self, learning_rate=0.05, num_processes=1): + super().__init__() + + self.save_hyperparameters() + self.model = create_model() + + def forward(self, x): + out = self.model(x) + return F.log_softmax(out, dim=1) + + def training_step(self, batch, batch_idx): + x, y = batch + logits = self(x) + loss = F.nll_loss(logits, y) + self.log("train_loss", loss) + return loss + + def configure_optimizers(self): + optimizer = torch.optim.SGD( + self.parameters(), + lr=self.hparams.learning_rate, + momentum=0.9, + weight_decay=5e-4, + ) + steps_per_epoch = 45000 // BATCH_SIZE // self.hparams.num_processes + scheduler_dict = { + "scheduler": OneCycleLR( + optimizer, + 0.1, + epochs=self.trainer.max_epochs, + steps_per_epoch=steps_per_epoch, + ), + "interval": "step", + } + return {"optimizer": optimizer, "lr_scheduler": scheduler_dict} +``` +For regular PyTorch modules, we also provide a "compile" method, that takes in a PyTorch module, an optimizer, and other PyTorch objects and "compiles" them into a `LightningModule`. You can find more information from [here](https://bigdl.readthedocs.io/en/latest/doc/PythonAPI/Nano/pytorch.html#bigdl-nano-pytorch) + + +### Step 4: Fit with Nano PyTorch Trainer +```python +model = LitResnet(learning_rate=0.05) +single_trainer = Trainer(max_epochs=30) +single_trainer.fit(model, datamodule=cifar10_dm) +``` +At this stage, you may already experience some speedup due to the optimized environment variables set by source bigdl-nano-init. Besides, you can also enable optimizations delivered by BigDL-Nano by setting a paramter or calling a method to accelerate PyTorch or PyTorch Lightning application on training workloads. +#### Increase the number of processes in distributed training to accelerate training. +```python +model = LitResnet(learning_rate=0.1, num_processes=4) +single_trainer = Trainer(max_epochs=30, num_processes=4) +single_trainer.fit(model, datamodule=cifar10_dm) +``` +- Note: Here we use linear scaling rule to imporve the performance of model on distributed training. You can find more useful tricks on distributed computing from the [paper](https://arxiv.org/abs/1706.02677) published by Facebook AI research(FAIR).
+- Note: If you're using a step related `lr_scheduler`, the value of lr_scheduler's pre_epoch_steps need to be modified accordingly, or the learning rate may not changes as expected. The change in learning_rate is shown in the following figure, where the blue line is the excepted change and the red one is the case when the pre_epoch_steps remain unchanged. +![](../Image/learning_rate.png) +#### Intel Extension for Pytorch (a.k.a. IPEX) link extends PyTorch with optimizations for an extra performance boost on Intel hardware. BigDL-Nano integrates IPEX through the Trainer. Users can turn on IPEX by setting use_ipex=True. +```python +model = LitResnet(learning_rate=0.1, num_processes=4) +single_trainer = Trainer(max_epochs=30, num_processes=4, use_ipex=True) +single_trainer.fit(model, datamodule=cifar10_dm) +``` +Get more information about the optimizations from [here](https://bigdl.readthedocs.io/en/latest/doc/PythonAPI/Nano/pytorch.html#bigdl-nano-pytorch) + +You can find the detailed result of training from [here](https://github.com/intel-analytics/BigDL/blob/main/python/nano/notebooks/pytorch/tutorial/pytorch_train.ipynb) \ No newline at end of file diff --git a/docs/readthedocs/source/index.rst b/docs/readthedocs/source/index.rst index 4a76681b..6bc50fcc 100644 --- a/docs/readthedocs/source/index.rst +++ b/docs/readthedocs/source/index.rst @@ -52,6 +52,7 @@ BigDL Documentation doc/Nano/QuickStart/tensorflow_inference.md doc/Nano/QuickStart/hpo.rst doc/Nano/Overview/known_issues.md + doc/Nano/QuickStart/index.md .. toctree:: :maxdepth: 1