helenai commited on
Commit
d54df43
·
1 Parent(s): 9ddbb00

support updated test structure

Browse files
Files changed (1) hide show
  1. app.py +69 -31
app.py CHANGED
@@ -1,12 +1,16 @@
 
 
1
  import re
2
  import subprocess
3
  import sys
4
  from datetime import datetime
5
- from importlib import import_module
6
  from pathlib import Path
7
 
8
  import gradio as gr
 
9
  import pandas as pd
 
10
 
11
  if Path("optimum-intel").is_dir():
12
  subprocess.run(["git", "pull"], cwd="optimum-intel")
@@ -15,44 +19,78 @@ else:
15
  test_path = Path(__file__).parent / "optimum-intel" / "tests" / "openvino"
16
  sys.path.append(str(test_path))
17
 
18
- from test_modeling import *
19
- from test_diffusion import *
20
- from test_decoder import *
 
 
 
21
 
22
- RESULT_FILE = "supported_models.md"
23
 
24
- def generate_model_list():
25
- tests = []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  d = {}
27
- for item in globals().copy():
28
- match = re.match("(OVModelFor.*IntegrationTest)", item) or re.match("(OVPipelineFor.*Test)", item)
29
- if match:
30
- tests.append(match.group(1))
31
-
32
- for test in tests:
33
- task = test.replace("IntegrationTest", "").replace("Test", "")
34
- if "OVModelForCausalLM" in task:
35
- cls = getattr(import_module("test_decoder"), test)
36
- elif "OVModelFor" in task:
37
- cls = getattr(import_module("test_modeling"), test)
38
- else:
39
- cls = getattr(import_module("test_diffusion"), test)
40
- try:
41
- print(cls.SUPPORTED_ARCHITECTURES)
42
- d[task] = cls.SUPPORTED_ARCHITECTURES
43
- except AttributeError:
44
- print(cls.SUPPORTED_ARCHITECTURES_WITH_HIDDEN_STATES)
45
- print(cls.SUPPORTED_ARCHITECTURES_WITH_ATTENTION)
46
- d[task] = cls.SUPPORTED_ARCHITECTURES_WITH_ATTENTION + cls.SUPPORTED_ARCHITECTURES_WITH_HIDDEN_STATES
47
 
48
- with open(RESULT_FILE, "w") as f:
49
- f.write(f"Updated at {datetime.now().strftime('%d %B %Y')}\n\n")
50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  summary = []
52
  all_archs = []
53
- for archs in d.values():
54
  all_archs += archs
55
- for title, supported_models in d.items():
56
  f.write(f"## {title}\n\n")
57
  for item in supported_models:
58
  f.write(f" - {item}\n")
 
1
+ import importlib.metadata
2
+ import inspect
3
  import re
4
  import subprocess
5
  import sys
6
  from datetime import datetime
7
+ from importlib import reload
8
  from pathlib import Path
9
 
10
  import gradio as gr
11
+ import optimum.intel.utils.import_utils as import_utils
12
  import pandas as pd
13
+ from packaging.requirements import Requirement
14
 
15
  if Path("optimum-intel").is_dir():
16
  subprocess.run(["git", "pull"], cwd="optimum-intel")
 
19
  test_path = Path(__file__).parent / "optimum-intel" / "tests" / "openvino"
20
  sys.path.append(str(test_path))
21
 
22
+ # import test files globally. Importing inside a function with import_module is extremely
23
+ # slow inside a gradio app
24
+ import test_decoder
25
+ import test_diffusion
26
+ import test_modeling
27
+ import test_seq2seq
28
 
 
29
 
30
+ def get_supported_models_for_version(version):
31
+ """
32
+ Get supported architectures for a particular transformers version. Uses mocking to set the
33
+ transformers version to `version`.
34
+ """
35
+ import_utils._transformers_version = version
36
+
37
+ # Patch _transformers version
38
+ test_seq2seq._transformers_version = version
39
+ test_modeling._transformers_version = version
40
+ test_diffusion._transformers_version = version
41
+ test_decoder._transformers_version = version
42
+
43
+ # Re-import to refresh SUPPORTED_ARCHITECTURES
44
+ seq2seq = reload(test_seq2seq)
45
+ decoder = reload(test_decoder)
46
+ modeling = reload(test_modeling)
47
+ diffusion = reload(test_diffusion)
48
+
49
+ # Get SUPPORTED_ARCHITECUTRES for all modules
50
  d = {}
51
+ modules = [seq2seq, decoder, modeling, diffusion]
52
+ for mod in modules:
53
+ for name, obj in inspect.getmembers(mod):
54
+ if inspect.isclass(obj):
55
+ if re.match(r"(OVModelFor.*IntegrationTest)", name) or re.match(r"(OVPipelineFor.*Test)", name):
56
+ task = name.replace("IntegrationTest", "").replace("Test", "")
57
+ if "CustomTasks" not in task:
58
+ d[task] = obj.SUPPORTED_ARCHITECTURES
59
+ return d # sorted(set(all_archs))
 
 
 
 
 
 
 
 
 
 
 
60
 
 
 
61
 
62
+ def get_min_max_transformers():
63
+ """
64
+ Get minumum and maximum supported transformers version by currently installed optimum-intel
65
+ """
66
+ meta = importlib.metadata.metadata("optimum-intel")
67
+ requires = meta.get_all("Requires-Dist") or []
68
+ transformers_versions = [item for item in requires if "transformers" in item and "extra" not in item][0]
69
+ req = Requirement(transformers_versions)
70
+ maxver, minver = [ver.version for ver in list(req.specifier)]
71
+ return (minver, maxver)
72
+
73
+
74
+ def generate_model_list():
75
+ RESULT_FILE = "supported_models.md"
76
+ minver, maxver = get_min_max_transformers() # This returns a too large maxver but that is not a problem
77
+ versions = [minver, "4.53.0", maxver]
78
+
79
+ model_classes_with_models = {}
80
+ for v in versions:
81
+ model_classes_with_models_version = get_supported_models_for_version(v)
82
+ for item in model_classes_with_models_version:
83
+ model_classes_with_models.setdefault(item, set())
84
+ model_classes_with_models[item].update(model_classes_with_models_version[item])
85
+
86
+ with open(RESULT_FILE, "w") as f:
87
+ optimum_intel_version = importlib.metadata.version("optimum-intel")
88
+ f.write(f"Updated at {datetime.now().strftime('%d %B %Y')} using optimum-intel {optimum_intel_version}\n\n")
89
  summary = []
90
  all_archs = []
91
+ for archs in model_classes_with_models.values():
92
  all_archs += archs
93
+ for title, supported_models in model_classes_with_models.items():
94
  f.write(f"## {title}\n\n")
95
  for item in supported_models:
96
  f.write(f" - {item}\n")