Spaces:
Runtime error
Runtime error
| import importlib.metadata | |
| import inspect | |
| import re | |
| import subprocess | |
| import sys | |
| from datetime import datetime | |
| from importlib import reload | |
| from pathlib import Path | |
| import gradio as gr | |
| import optimum.intel.utils.import_utils as import_utils | |
| import pandas as pd | |
| from packaging.requirements import Requirement | |
| if Path("optimum-intel").is_dir(): | |
| subprocess.run(["git", "pull"], cwd="optimum-intel") | |
| else: | |
| subprocess.run(["git", "clone", "https://github.com/huggingface/optimum-intel.git"]) | |
| test_path = Path(__file__).parent / "optimum-intel" / "tests" / "openvino" | |
| sys.path.append(str(test_path)) | |
| # import test files globally. Importing inside a function with import_module is extremely | |
| # slow inside a gradio app | |
| import test_decoder | |
| import test_diffusion | |
| import test_modeling | |
| import test_seq2seq | |
| def get_supported_models_for_version(version): | |
| """ | |
| Get supported architectures for a particular transformers version. Uses mocking to set the | |
| transformers version to `version`. | |
| """ | |
| import_utils._transformers_version = version | |
| # Patch _transformers version | |
| test_seq2seq._transformers_version = version | |
| test_modeling._transformers_version = version | |
| test_diffusion._transformers_version = version | |
| test_decoder._transformers_version = version | |
| # Re-import to refresh SUPPORTED_ARCHITECTURES | |
| seq2seq = reload(test_seq2seq) | |
| decoder = reload(test_decoder) | |
| modeling = reload(test_modeling) | |
| diffusion = reload(test_diffusion) | |
| # Get SUPPORTED_ARCHITECUTRES for all modules | |
| d = {} | |
| modules = [seq2seq, decoder, modeling, diffusion] | |
| for mod in modules: | |
| for name, obj in inspect.getmembers(mod): | |
| if inspect.isclass(obj): | |
| if re.match(r"(OVModelFor.*IntegrationTest)", name) or re.match(r"(OVPipelineFor.*Test)", name): | |
| task = name.replace("IntegrationTest", "").replace("Test", "") | |
| if "CustomTasks" not in task: | |
| d[task] = obj.SUPPORTED_ARCHITECTURES | |
| return d # sorted(set(all_archs)) | |
| def get_min_max_transformers(): | |
| """ | |
| Get minumum and maximum supported transformers version by currently installed optimum-intel | |
| """ | |
| meta = importlib.metadata.metadata("optimum-intel") | |
| requires = meta.get_all("Requires-Dist") or [] | |
| transformers_versions = [item for item in requires if "transformers" in item and "extra" not in item][0] | |
| req = Requirement(transformers_versions) | |
| maxver, minver = [ver.version for ver in list(req.specifier)] | |
| return (minver, maxver) | |
| def generate_model_list(): | |
| RESULT_FILE = "supported_models.md" | |
| minver, maxver = get_min_max_transformers() # This returns a too large maxver but that is not a problem | |
| versions = [minver, "4.53.0", maxver] | |
| model_classes_with_models = {} | |
| for v in versions: | |
| model_classes_with_models_version = get_supported_models_for_version(v) | |
| for item in model_classes_with_models_version: | |
| model_classes_with_models.setdefault(item, set()) | |
| model_classes_with_models[item].update(model_classes_with_models_version[item]) | |
| with open(RESULT_FILE, "w") as f: | |
| optimum_intel_version = importlib.metadata.version("optimum-intel") | |
| f.write(f"Updated at {datetime.now().strftime('%d %B %Y')} using optimum-intel {optimum_intel_version}\n\n") | |
| summary = [] | |
| all_archs = [] | |
| for archs in model_classes_with_models.values(): | |
| all_archs += archs | |
| for title, supported_models in model_classes_with_models.items(): | |
| f.write(f"## {title}\n\n") | |
| for item in supported_models: | |
| f.write(f" - {item}\n") | |
| f.write("\n") | |
| summary.append((title, len(supported_models))) | |
| md_summary = pd.DataFrame.from_records(summary, columns=["task", "number of architectures"]).to_markdown() | |
| f.write("# Summary\n\n") | |
| f.write(md_summary) | |
| f.write("\n\n") | |
| num_total_archs = len(set(all_archs)) | |
| f.write(f"Total unique architectures: {num_total_archs}\n\n") | |
| f.write(f"Total validated architecture/task combinations: {len(all_archs)}\n\n") | |
| return Path(RESULT_FILE).read_text(), RESULT_FILE | |
| demo = gr.Interface( | |
| fn=generate_model_list, | |
| title="List of validated architectures for optimum[openvino]", | |
| inputs=[], | |
| outputs=[gr.Markdown(), gr.File()], | |
| ) | |
| demo.launch(server_name="0.0.0.0") | |