Skip to content

Commit

Permalink
Merge branch 'fix_pytorch_pruner' into 1.0b
Browse files Browse the repository at this point in the history
  • Loading branch information
VincyZhang committed Dec 10, 2022
2 parents 78ee7e7 + 58cd3de commit 089025a
Show file tree
Hide file tree
Showing 37 changed files with 71 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@
"import transformers\n",
"from dataclasses import dataclass, field\n",
"from datasets import load_dataset, load_metric\n",
"from nlp_toolkit import metrics , QuantizationConfig\n",
"from intel_extension_for_transformers import metrics , QuantizationConfig\n",
"from transformers import (\n",
" AutoConfig,\n",
" AutoModelForQuestionAnswering,\n",
Expand Down Expand Up @@ -161,7 +161,7 @@
"outputs": [],
"source": [
"from transformers import is_torch_tpu_available\n",
"from nlp_toolkit.optimization.trainer import NLPTrainer\n",
"from intel_extension_for_transformers.optimization.trainer import NLPTrainer\n",
"from transformers.trainer_utils import PredictionOutput\n",
"\n",
"if is_torch_tpu_available():\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
"import timeit\n",
"import torch\n",
"import transformers\n",
"from nlp_toolkit import (\n",
"from intel_extension_for_transformers import (\n",
" metrics,\n",
" PrunerConfig,\n",
" PruningConfig,\n",
Expand Down
2 changes: 1 addition & 1 deletion docs/tutorials/pytorch/question-answering/pruning.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
"import transformers\n",
"from dataclasses import dataclass, field\n",
"from datasets import load_dataset, load_metric\n",
"from nlp_toolkit import metrics, OptimizedModel, PrunerConfig, PruningConfig, PruningMode\n",
"from intel_extension_for_transformers import metrics, OptimizedModel, PrunerConfig, PruningConfig, PruningMode\n",
"from trainer_qa import QuestionAnsweringTrainer\n",
"from transformers import (\n",
" AutoConfig,\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
"import transformers\n",
"from dataclasses import dataclass, field\n",
"from datasets import load_dataset, load_metric\n",
"from nlp_toolkit import (\n",
"from intel_extension_for_transformers import (\n",
" metrics,\n",
" PrunerConfig,\n",
" PruningConfig,\n",
Expand All @@ -78,7 +78,7 @@
" OptimizedModel,\n",
" objectives\n",
")\n",
"from nlp_toolkit.optimization.trainer import NLPTrainer\n",
"from intel_extension_for_transformers.optimization.trainer import NLPTrainer\n",
"from torch.utils.data import DataLoader\n",
"from tqdm.auto import tqdm\n",
"from transformers import (\n",
Expand Down
4 changes: 2 additions & 2 deletions docs/tutorials/pytorch/text-classification/pruning.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,13 @@
"import transformers\n",
"from dataclasses import dataclass, field\n",
"from datasets import load_dataset, load_metric\n",
"from nlp_toolkit import (\n",
"from intel_extension_for_transformers import (\n",
" metrics,\n",
" OptimizedModel,\n",
" PrunerConfig,\n",
" PruningConfig,\n",
")\n",
"from nlp_toolkit.optimization.trainer import NLPTrainer\n",
"from intel_extension_for_transformers.optimization.trainer import NLPTrainer\n",
"from transformers import (\n",
" AutoConfig,\n",
" AutoModelForSequenceClassification,\n",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
neural-compressor
neural-compressor==1.14.2
transformers==4.23.1
accelerate
datasets >= 1.8.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
neural-compressor
neural-compressor==1.14.2
transformers==4.23.1
accelerate
datasets >= 1.8.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
neural-compressor
neural-compressor==1.14.2
transformers==4.23.1
accelerate
datasets >= 1.8.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
neural-compressor
neural-compressor==1.14.2
transformers==4.23.1
accelerate
datasets >= 1.8.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
neural-compressor
neural-compressor==1.14.2
transformers==4.23.1
accelerate
datasets >= 1.8.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
neural-compressor
neural-compressor==1.14.2
transformers==4.23.1
accelerate
datasets >= 1.8.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
neural-compressor
neural-compressor==1.14.2
transformers==4.23.1
accelerate
datasets >= 1.8.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
neural-compressor
neural-compressor==1.14.2
transformers==4.23.1
accelerate
datasets >= 1.8.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
neural-compressor
neural-compressor==1.14.2
transformers==4.23.1
accelerate
datasets >= 1.8.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
neural-compressor
neural-compressor==1.14.2
transformers==4.23.1
accelerate
datasets >= 1.8.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
neural-compressor
neural-compressor==1.14.2
transformers==4.23.1
accelerate
datasets >= 1.8.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
neural-compressor
neural-compressor==1.14.2
transformers==4.23.1
accelerate
datasets >= 1.8.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
neural-compressor
neural-compressor==1.14.2
transformers==4.23.1
accelerate
datasets >= 1.8.0
Expand Down
26 changes: 9 additions & 17 deletions examples/optimization/pytorch/huggingface/pytorch_pruner/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,27 +85,22 @@ we have provided several pruning examples, which are trained on different datase
### [SQuAD](https://github.com/intel/neural-compressor/tree/master/examples/pytorch/nlp/huggingface_models/question-answering/pruning)
We can train a sparse model with NxM (2:4) pattern:
```
python3 ./run_qa_no_trainer.py \
python3 ./run_glue_no_trainer.py \
--model_name_or_path "/path/to/dense_finetuned_model/" \
--pruning_config "./bert_mini_2in4.yaml" \
--dataset_name "squad" \
--max_seq_length "384" \
--doc_stride "128" \
--pruning_config "./bert_mini_mrpc_4x1.yaml" \
--task_name "mrpc" \
--per_device_train_batch_size "8" \
--weight_decay "1e-7" \
--learning_rate "1e-4" \
--num_train_epochs 10 \
--teacher_model_name_or_path "/path/to/dense_finetuned_model/" \
--distill_loss_weight "8.0"
```
We can also choose 4x1 as our pruning pattern:
```
python ./run_qa_no_trainer.py \
python ./run_glue_no_trainer.py \
--model_name_or_path "/path/to/dense_finetuned_model/" \
--pruning_config "./bert_mini_4x1.yaml" \
--dataset_name "squad" \
--max_seq_length "384" \
--doc_stride "128" \
--pruning_config "./bert_mini_mrpc_4x1.yaml" \
--task_name "mrpc" \
--per_device_train_batch_size "16" \
--per_device_eval_batch_size "16" \
--num_warmup_steps "1000" \
Expand All @@ -115,18 +110,15 @@ python ./run_qa_no_trainer.py \
--num_train_epochs 10 \
--weight_decay "1e-7" \
--output_dir "pruned_squad_bert-mini" \
--teacher_model_name_or_path "/path/to/dense_finetuned_model/" \
--distill_loss_weight "4.5"
```
Dense model training is also supported as following (by setting --do_prune to False):
```
python \
./run_qa_no_trainer.py \
./run_glue_no_trainer.py \
--model_name_or_path "prajjwal1/bert-mini" \
--pruning_config "./bert_mini_4x1.yaml" \
--dataset_name "squad" \
--max_seq_length "384" \
--doc_stride "128" \
--task_name "mrpc" \
--pruning_config "./bert_mini_mrpc_4x1.yaml" \
--per_device_train_batch_size "8" \
--per_device_eval_batch_size "16" \
--num_warmup_steps "1000" \
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
datasets
tqdm
torch >= 1.10.0
transformers>=4.12.0
accelerate
huggingface_hub
intel_extension_for_transformers
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from pathlib import Path
import sys

from nlp_toolkit.optimization.pytorch_pruner.pruning import Pruning
from intel_extension_for_transformers.optimization.pytorch_pruner.pruning import Pruning

sys.path.insert(0, './')
import datasets
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
datasets >= 1.17
sentencepiece != 0.1.92
protobuf
intel-tensorflow >= 2.5
intel-tensorflow == 2.10.0
transformers >= 4.12.0
sklearn
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
datasets >= 1.17
sentencepiece != 0.1.92
protobuf
intel-tensorflow >= 2.5
intel-tensorflow == 2.10.0
transformers >= 4.12.0
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
git+https://github.com/intel/neural-compressor.git@old_api_examples
datasets >= 1.17
sentencepiece != 0.1.92
protobuf
intel-tensorflow >= 2.5
intel-tensorflow == 2.10.0
transformers>=4.12.0
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
git+https://github.com/intel/neural-compressor.git@old_api_examples
datasets >= 1.17
sentencepiece != 0.1.92
protobuf
intel-tensorflow >= 2.5
intel-tensorflow == 2.10.0
transformers>=4.12.0
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
git+https://github.com/intel/neural-compressor.git@old_api_examples
datasets >= 1.17
sentencepiece != 0.1.92
protobuf
intel-tensorflow >= 2.5
intel-tensorflow == 2.10.0
transformers>=4.12.0
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
datasets >= 1.17
sentencepiece != 0.1.92
protobuf
intel-tensorflow >= 2.5
intel-tensorflow == 2.10.0
transformers >= 4.12.0
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ datasets >= 1.17
sentencepiece != 0.1.92
seqeval
protobuf
intel-tensorflow >= 2.5
intel-tensorflow == 2.10.0
transformers >= 4.12.0
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
onnx
onnxruntime
tensorflow==2.10.0
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def test_graph_dispatch(self):
# validate int8 sparse graph tuning
int8_model_path = "/home/tensorflow/localfile/nlptoolkit_ut_model/bert_mini_int8_original_IR"
if is_win():
int8_model_path = "C:/Users/sdp/Documents/models/localfile/nlptoolkit_ut_model/bert_mini_int8_original_IR"
int8_model_path = "D:\\dataset\\nlptoolkit_ut_model\\bert_mini_int8_original_IR"
self.assertTrue(os.path.exists(int8_model_path),
'INT8 IR model is not found, please set your own model path!')
int8_model = compile(int8_model_path)
Expand All @@ -59,7 +59,7 @@ def test_graph_dispatch(self):
# validate onednn graph tuning
fp32_model_path = "/home/tensorflow/localfile/nlptoolkit_ut_model/bert_mini_sst2_1x4_fp32.onnx"
if is_win():
fp32_model_path = "C:/Users/sdp/Documents/models/localfile/nlptoolkit_ut_model/bert_mini_sst2_1x4_fp32.onnx"
fp32_model_path = "D:\\dataset\\nlptoolkit_ut_model\\bert_mini_sst2_1x4_fp32.onnx"
self.assertTrue(os.path.exists(fp32_model_path),
'FP32 ONNX model is not found, please set your own model path!')
fp32_model = compile(fp32_model_path)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def test_pattern_dispatch(self):
# validate pattern tuning
fp32_model_path = "/home/tensorflow/localfile/nlptoolkit_ut_model/bert_mini_sst2_1x4_fp32.onnx"
if is_win():
fp32_model_path = "C:/Users/sdp/Documents/models/localfile/nlptoolkit_ut_model/bert_mini_sst2_1x4_fp32.onnx"
fp32_model_path = "D:\\dataset\\nlptoolkit_ut_model\\bert_mini_sst2_1x4_fp32.onnx"
self.assertTrue(os.path.exists(fp32_model_path),
'FP32 ONNX model is not found, please set your own model path!')
fp32_model = compile(fp32_model_path)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ def test_qkv_merge_1(self):
model_path = "/home/tensorflow/localfile/nlptoolkit_ut_model/onnx_best_acc_distilbert.onnx"
pattern_config = "/home/tensorflow/localfile/nlptoolkit_ut_model/qkv_merge_pattern_config"
if is_win():
model_path = "C:/Users/sdp/Documents/models/localfile/nlptoolkit_ut_model/onnx_best_acc_distilbert.onnx"
pattern_config = "C:/Users/sdp/Documents/models/localfile/nlptoolkit_ut_model/qkv_merge_pattern_config"
model_path = "D:\\dataset\\nlptoolkit_ut_model\\onnx_best_acc_distilbert.onnx"
pattern_config = "D:\\dataset\\nlptoolkit_ut_model\\qkv_merge_pattern_config"
graph = compile(model_path, config=pattern_config)
self.assertEqual(100, len(graph.nodes))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,14 @@
# limitations under the License.

import os
import sys
import unittest
import numpy as np
from intel_extension_for_transformers.backends.neural_engine.compile import compile


def is_win():
return sys.platform.startswith('win')
class TestQuantOnnxExecute(unittest.TestCase):
@classmethod
def setUpClass(self):
Expand All @@ -35,15 +39,19 @@ def test_onnx_qlinear_compile(self):
input_1 = np.random.uniform(low=0, high=1, size=[1, 128]).astype('int32')
input_2 = np.random.uniform(low=0, high=1, size=[1, 128]).astype('int32')
# compile and execute qlinear model
qlinear_model_path = "/tf_dataset2/models/nlp_toolkit/qlinear/bert_mini_sst2_qlinear.onnx"
qlinear_model_path = "/home/tensorflow/localfile/nlptoolkit_ut_model/qlinear/bert_mini_sst2_qlinear.onnx"
if is_win():
qlinear_model_path = "D:\\dataset\\nlptoolkit_ut_model\\qlinear\\bert_mini_sst2_qlinear.onnx"
os.environ['GLOG_minloglevel'] = '2'
self.assertTrue(os.path.exists(qlinear_model_path),
'ONNX QLinear model is not found, please set your own model path!')
qlinear_model = compile(qlinear_model_path)
qlinear_output_dict = qlinear_model.inference([input_0, input_1, input_2])
qlinear_output = list(qlinear_output_dict.values())[0]
# compile and execute qdq model
qdq_model_path = "/tf_dataset2/models/nlp_toolkit/qlinear/bert_mini_sst2_qdq.onnx"
qdq_model_path = "/home/tensorflow/localfile/nlptoolkit_ut_model/qlinear/bert_mini_sst2_qdq.onnx"
if is_win():
qdq_model_path = "D:\\dataset\\nlptoolkit_ut_model\\qlinear\\bert_mini_sst2_qdq.onnx"
self.assertTrue(os.path.exists(qdq_model_path),
'ONNX QDQ model is not found, please set your own model path!')
qdq_model = compile(qdq_model_path)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def test_transpose(self):
os.environ['GLOG_minloglevel'] = '2'
root_dir = '/home/tensorflow/localfile/nlptoolkit_ut_model/'
if is_win():
root_dir = 'C:/Users/sdp/Documents/models/localfile/nlptoolkit_ut_model/'
root_dir = 'D:\\dataset\\nlptoolkit_ut_model\\'
model_dir = root_dir + 'onnx_best_acc_distilbert.merged.untransposed'
pattern_config = root_dir + 'pattern_config'
self.assertTrue(os.path.exists(model_dir),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
torch = LazyImport("torch")

def distributed_log_wrapper(func, msg):
if self.framework != "pytorch" or not torch.distributed.is_initialized() or torch.distributed.get_rank() == 0:
if not torch.distributed.is_initialized() or torch.distributed.get_rank() == 0:
func(msg)


Expand Down Expand Up @@ -135,7 +135,8 @@ def reload_tf_model(model):
"Metrics of model architecture {} is {}.".format(model_arch_paras, metrics)
)
self.search_results[tuple(model_arch_paras.values())] = metrics
if self.framework != "pytorch" or not torch.distributed.is_initialized() or torch.distributed.get_rank() == 0:
if (self.framework != "pytorch" or not torch.distributed.is_initialized()
or torch.distributed.get_rank() == 0):
self.advisor.feedback(sum(self.metrics_conversion(metrics)))
print(f'res_save_path: {res_save_path}, save_path = {save_path}')
os.makedirs(save_path, exist_ok=True)
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
neural_compressor
neural-compressor==1.14.2
numpy
packaging
protobuf --no-binary=protobuf
Expand Down
Loading

0 comments on commit 089025a

Please sign in to comment.