diff --git a/.lintrunner.toml b/.lintrunner.toml index fe8ecad1fc8..dd75ea8f323 100644 --- a/.lintrunner.toml +++ b/.lintrunner.toml @@ -294,6 +294,7 @@ include_patterns = [ 'build/**/*.py', 'codegen/**/*.py', # 'devtools/**/*.py', + 'devtools/visualization/**/*.py', 'docs/**/*.py', # 'examples/**/*.py', # 'exir/**/*.py', diff --git a/devtools/install_requirements.sh b/devtools/install_requirements.sh new file mode 100755 index 00000000000..242bc702575 --- /dev/null +++ b/devtools/install_requirements.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +# Conflict: this requires numpy<2 whereas ExecuTorch core requires numpy>=2 +# Follow https://github.com/google-ai-edge/model-explorer/issues/277 for potential +# resolution +pip install ai-edge-model-explorer>=0.1.16 diff --git a/devtools/visualization/visualization_utils.py b/devtools/visualization/visualization_utils.py index a2ee4c60505..4d520a66366 100644 --- a/devtools/visualization/visualization_utils.py +++ b/devtools/visualization/visualization_utils.py @@ -8,9 +8,16 @@ import time from executorch.exir import EdgeProgramManager, ExecutorchProgramManager -from model_explorer import config, consts, visualize_from_config # type: ignore from torch.export.exported_program import ExportedProgram +try: + from model_explorer import config, consts, visualize_from_config # type: ignore +except ImportError: + print( + "Error: 'model_explorer' is not installed. Install using devtools/install_requirement.sh" + ) + raise + class SingletonModelExplorerServer: """Singleton context manager for starting a model-explorer server. diff --git a/devtools/visualization/visualization_utils_test.py b/devtools/visualization/visualization_utils_test.py index 89781ab4f43..dafefa7dfdd 100644 --- a/devtools/visualization/visualization_utils_test.py +++ b/devtools/visualization/visualization_utils_test.py @@ -17,7 +17,14 @@ visualize, ) from executorch.exir import ExportedProgram -from model_explorer.config import ModelExplorerConfig # type: ignore + +try: + from model_explorer.config import ModelExplorerConfig # type: ignore +except ImportError: + print( + "Error: 'model_explorer' is not installed. Install using devtools/install_requirement.sh" + ) + raise @pytest.fixture diff --git a/install_requirements.py b/install_requirements.py index 26093cab849..adb26170cd0 100644 --- a/install_requirements.py +++ b/install_requirements.py @@ -170,7 +170,6 @@ def python_is_compatible(): "tomli", # Imported by extract_sources.py when using python < 3.11. "wheel", # For building the pip package archive. "zstd", # Imported by resolve_buck.py. - "ai-edge-model-explorer>=0.1.16", # For visualizing ExportedPrograms ] # Assemble the list of requirements to actually install. diff --git a/pytest.ini b/pytest.ini index b7e9afb9b94..d0c27fdfabd 100644 --- a/pytest.ini +++ b/pytest.ini @@ -14,6 +14,7 @@ addopts = # explicitly list out tests that are running successfully in oss examples/models/test devtools/ + --ignore=devtools/visualization/visualization_utils_test.py # examples examples/models/llama/tests examples/models/llama3_2_vision/preprocess