Nano: upgrade openvino to 2022.3.0 and torchmetics to 0.11.0 (#7091)
				
					
				
			This commit is contained in:
		
							parent
							
								
									c66cca0c62
								
							
						
					
					
						commit
						6375e36f00
					
				
					 5 changed files with 13 additions and 14 deletions
				
			
		| 
						 | 
					@ -160,12 +160,12 @@ There are a few arguments required only by INC, and you should not specify or mo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Here is an example to use INC with accuracy control as below. It will search for a model within 1% accuracy drop with 10 trials.
 | 
					Here is an example to use INC with accuracy control as below. It will search for a model within 1% accuracy drop with 10 trials.
 | 
				
			||||||
```python
 | 
					```python
 | 
				
			||||||
from torchmetrics.classification import Accuracy
 | 
					from torchmetrics.classification import MulticlassAccuracy
 | 
				
			||||||
InferenceOptimizer.quantize(model,
 | 
					InferenceOptimizer.quantize(model,
 | 
				
			||||||
                            precision='int8',
 | 
					                            precision='int8',
 | 
				
			||||||
                            accelerator=None,
 | 
					                            accelerator=None,
 | 
				
			||||||
                            calib_data=dataloader,
 | 
					                            calib_data=dataloader,
 | 
				
			||||||
                            metric=Accuracy()
 | 
					                            metric=MulticlassAccuracy(num_classes=10)
 | 
				
			||||||
                            accuracy_criterion={'relative': 0.01, 'higher_is_better': True},
 | 
					                            accuracy_criterion={'relative': 0.01, 'higher_is_better': True},
 | 
				
			||||||
                            approach='static',
 | 
					                            approach='static',
 | 
				
			||||||
                            method='fx',
 | 
					                            method='fx',
 | 
				
			||||||
| 
						 | 
					@ -182,7 +182,7 @@ InferenceOptimizer.quantize(model,
 | 
				
			||||||
                            precision='int8',
 | 
					                            precision='int8',
 | 
				
			||||||
                            accelerator='openvino',
 | 
					                            accelerator='openvino',
 | 
				
			||||||
                            calib_data=dataloader,
 | 
					                            calib_data=dataloader,
 | 
				
			||||||
                            metric=Accuracy()
 | 
					                            metric=MulticlassAccuracy(num_classes=10)
 | 
				
			||||||
                            accuracy_criterion={'relative': 0.01, 'higher_is_better': True},
 | 
					                            accuracy_criterion={'relative': 0.01, 'higher_is_better': True},
 | 
				
			||||||
                            approach='static',
 | 
					                            approach='static',
 | 
				
			||||||
                            max_trials=10,
 | 
					                            max_trials=10,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,12 +76,12 @@ There are a few arguments required only by INC.
 | 
				
			||||||
- `outputs`:     A list of output names. Default: None, automatically get names from the graph.
 | 
					- `outputs`:     A list of output names. Default: None, automatically get names from the graph.
 | 
				
			||||||
Here is an example to use INC with accuracy control as below. It will search for a model within 1% accuracy drop with 10 trials.
 | 
					Here is an example to use INC with accuracy control as below. It will search for a model within 1% accuracy drop with 10 trials.
 | 
				
			||||||
```python
 | 
					```python
 | 
				
			||||||
from torchmetrics.classification import Accuracy
 | 
					from torchmetrics.classification import MulticlassAccuracy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
q_model = model.quantize(precision='int8',
 | 
					q_model = model.quantize(precision='int8',
 | 
				
			||||||
                         accelerator=None,
 | 
					                         accelerator=None,
 | 
				
			||||||
                         calib_dataset= train_dataset,
 | 
					                         calib_dataset= train_dataset,
 | 
				
			||||||
                         metric=Accuracy(),
 | 
					                         metric=MulticlassAccuracy(num_classes=10),
 | 
				
			||||||
                         accuracy_criterion={'relative': 0.01, 'higher_is_better': True},
 | 
					                         accuracy_criterion={'relative': 0.01, 'higher_is_better': True},
 | 
				
			||||||
                         approach='static',
 | 
					                         approach='static',
 | 
				
			||||||
                         tuning_strategy='bayesian',
 | 
					                         tuning_strategy='bayesian',
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -52,7 +52,7 @@ train_dataloader = DataLoader(train_dataset, batch_size=32)
 | 
				
			||||||
import torch
 | 
					import torch
 | 
				
			||||||
from torchvision.models import resnet18
 | 
					from torchvision.models import resnet18
 | 
				
			||||||
from bigdl.nano.pytorch import Trainer
 | 
					from bigdl.nano.pytorch import Trainer
 | 
				
			||||||
from torchmetrics import Accuracy
 | 
					from torchmetrics.classification import MulticlassAccuracy
 | 
				
			||||||
model_ft = resnet18(pretrained=True)
 | 
					model_ft = resnet18(pretrained=True)
 | 
				
			||||||
num_ftrs = model_ft.fc.in_features
 | 
					num_ftrs = model_ft.fc.in_features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,7 +62,7 @@ loss_ft = torch.nn.CrossEntropyLoss()
 | 
				
			||||||
optimizer_ft = torch.optim.SGD(model_ft.parameters(), lr=0.01, momentum=0.9, weight_decay=5e-4)
 | 
					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.
 | 
					# Compile our model with loss function, optimizer.
 | 
				
			||||||
model = Trainer.compile(model_ft, loss_ft, optimizer_ft, metrics=[Accuracy])
 | 
					model = Trainer.compile(model_ft, loss_ft, optimizer_ft, metrics=[MulticlassAccuracy(num_classes=37)])
 | 
				
			||||||
trainer = Trainer(max_epochs=5)
 | 
					trainer = Trainer(max_epochs=5)
 | 
				
			||||||
trainer.fit(model, train_dataloader=train_dataloader)
 | 
					trainer.fit(model, train_dataloader=train_dataloader)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -79,8 +79,8 @@ Quantization is widely used to compress models to a lower precision, which not o
 | 
				
			||||||
Without extra accelerator, `InferenceOptimizer.quantize()` returns a pytorch module with desired precision and accuracy. You can add quantization as below:
 | 
					Without extra accelerator, `InferenceOptimizer.quantize()` returns a pytorch module with desired precision and accuracy. You can add quantization as below:
 | 
				
			||||||
```python
 | 
					```python
 | 
				
			||||||
from bigdl.nano.pytorch import InferenceOptimizer
 | 
					from bigdl.nano.pytorch import InferenceOptimizer
 | 
				
			||||||
from torchmetrics.functional import accuracy
 | 
					from torchmetrics.classification import MulticlassAccuracy
 | 
				
			||||||
q_model = InferenceOptimizer.quantize(model, calib_data=train_dataloader, metric=accuracy)
 | 
					q_model = InferenceOptimizer.quantize(model, calib_data=train_dataloader, metric=MulticlassAccuracy(num_classes=37))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# run simple prediction
 | 
					# run simple prediction
 | 
				
			||||||
y_hat = q_model(x)
 | 
					y_hat = q_model(x)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,7 +51,7 @@ train_dataloader = DataLoader(train_dataset, batch_size=32)
 | 
				
			||||||
import torch
 | 
					import torch
 | 
				
			||||||
from torchvision.models import resnet18
 | 
					from torchvision.models import resnet18
 | 
				
			||||||
from bigdl.nano.pytorch import Trainer
 | 
					from bigdl.nano.pytorch import Trainer
 | 
				
			||||||
from torchmetrics import Accuracy
 | 
					from torchmetrics.classification import MulticlassAccuracy
 | 
				
			||||||
model_ft = resnet18(pretrained=True)
 | 
					model_ft = resnet18(pretrained=True)
 | 
				
			||||||
num_ftrs = model_ft.fc.in_features
 | 
					num_ftrs = model_ft.fc.in_features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,7 +61,7 @@ loss_ft = torch.nn.CrossEntropyLoss()
 | 
				
			||||||
optimizer_ft = torch.optim.SGD(model_ft.parameters(), lr=0.01, momentum=0.9, weight_decay=5e-4)
 | 
					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.
 | 
					# Compile our model with loss function, optimizer.
 | 
				
			||||||
model = Trainer.compile(model_ft, loss_ft, optimizer_ft, metrics=[Accuracy])
 | 
					model = Trainer.compile(model_ft, loss_ft, optimizer_ft, metrics=[MulticlassAccuracy(num_classes=37)])
 | 
				
			||||||
trainer = Trainer(max_epochs=5)
 | 
					trainer = Trainer(max_epochs=5)
 | 
				
			||||||
trainer.fit(model, train_dataloader=train_dataloader)
 | 
					trainer.fit(model, train_dataloader=train_dataloader)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -78,8 +78,8 @@ With the ONNXRuntime accelerator, `InferenceOptimizer.quantize()` will return a
 | 
				
			||||||
you can add quantization as below:
 | 
					you can add quantization as below:
 | 
				
			||||||
```python
 | 
					```python
 | 
				
			||||||
from bigdl.nano.pytorch import InferenceOptimizer
 | 
					from bigdl.nano.pytorch import InferenceOptimizer
 | 
				
			||||||
from torchmetrics.functional import accuracy
 | 
					from torchmetrics.classification import MulticlassAccuracy
 | 
				
			||||||
ort_q_model = InferenceOptimizer.quantize(model, accelerator='onnxruntime', calib_data=train_dataloader, metric=accuracy)
 | 
					ort_q_model = InferenceOptimizer.quantize(model, accelerator='onnxruntime', calib_data=train_dataloader, metric=MulticlassAccuracy(num_classes=37))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# run simple prediction
 | 
					# run simple prediction
 | 
				
			||||||
y_hat = ort_q_model(x)
 | 
					y_hat = ort_q_model(x)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -77,7 +77,6 @@ y_hat.argmax(dim=1)
 | 
				
			||||||
Accelerator='openvino' means using OpenVINO POT to do quantization. The quantization can be added as below:
 | 
					Accelerator='openvino' means using OpenVINO POT to do quantization. The quantization can be added as below:
 | 
				
			||||||
```python
 | 
					```python
 | 
				
			||||||
from bigdl.nano.pytorch import InferenceOptimizer
 | 
					from bigdl.nano.pytorch import InferenceOptimizer
 | 
				
			||||||
from torchmetrics import Accuracy
 | 
					 | 
				
			||||||
ov_q_model = InferenceOptimizer.quantize(model, accelerator="openvino", calib_data=data_loader)
 | 
					ov_q_model = InferenceOptimizer.quantize(model, accelerator="openvino", calib_data=data_loader)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# run simple prediction
 | 
					# run simple prediction
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue