-
Notifications
You must be signed in to change notification settings - Fork 3
/
convert.py
85 lines (73 loc) · 3.07 KB
/
convert.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from transformers import AutoTokenizer
from optimum.intel import OVWeightQuantizationConfig
from optimum.intel.openvino import OVModelForCausalLM
import os
from pathlib import Path
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument('-h',
'--help',
action='help',
help='Show this help message and exit.')
parser.add_argument('-m',
'--model_id',
default='Qwen/Qwen1.5-0.5B-Chat',
required=False,
type=str,
help='orignal model path')
parser.add_argument('-p',
'--precision',
required=False,
default="int4",
type=str,
choices=["fp16", "int8", "int4"],
help='fp16, int8 or int4')
parser.add_argument('-o',
'--output',
required=False,
type=str,
help='path to save the ir model')
parser.add_argument('-ms',
'--modelscope',
action='store_true',
help='download model from Model Scope')
args = parser.parse_args()
ir_model_path = Path(args.model_id.split(
"/")[1] + '-ov') if args.output is None else Path(args.output)
if not ir_model_path.exists():
os.mkdir(ir_model_path)
compression_configs = {
"sym": True,
"group_size": 128,
"ratio": 0.8,
}
if args.modelscope:
from modelscope import snapshot_download
print("====Downloading model from ModelScope=====")
model_path = snapshot_download(args.model_id, cache_dir='./')
else:
model_path = args.model_id
print("====Exporting IR=====")
if args.precision == "int4":
ov_model = OVModelForCausalLM.from_pretrained(model_path, export=True,
compile=False, quantization_config=OVWeightQuantizationConfig(
bits=4, **compression_configs))
elif args.precision == "int8":
ov_model = OVModelForCausalLM.from_pretrained(model_path, export=True,
compile=False, load_in_8bit=True)
else:
ov_model = OVModelForCausalLM.from_pretrained(model_path, export=True,
compile=False, load_in_8bit=False)
print("====Saving IR=====")
ov_model.save_pretrained(ir_model_path)
print("====Exporting tokenizer=====")
tokenizer = AutoTokenizer.from_pretrained(
model_path)
tokenizer.save_pretrained(ir_model_path)
print("====Exporting IR tokenizer=====")
from optimum.exporters.openvino.convert import export_tokenizer
export_tokenizer(tokenizer, ir_model_path)
print("====Finished=====")
del ov_model
del model_path