From eacde8d7c48935198fbf282b47186ded705cf2a0 Mon Sep 17 00:00:00 2001 From: Naren Dasan Date: Wed, 13 Apr 2022 20:00:39 -0700 Subject: [PATCH 1/6] fix(//core/conversion): Add special case for If and Loop which are handled by conversion and not a converter Signed-off-by: Naren Dasan Signed-off-by: Naren Dasan --- core/conversion/conversion.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/conversion/conversion.cpp b/core/conversion/conversion.cpp index 8da79b13a3..32d74b47c3 100644 --- a/core/conversion/conversion.cpp +++ b/core/conversion/conversion.cpp @@ -20,7 +20,10 @@ namespace conversion { bool isNodeConversionIgnored(const torch::jit::Node* n); bool OpSupported(const torch::jit::Node* n) { - return evaluators::shouldEvalAtConversionTime(n) || converters::node_is_convertable(n); + return evaluators::shouldEvalAtConversionTime(n) + || converters::node_is_convertable(n) + || n->kind() == torch::jit::prim::Loop + || n->kind() == torch::jit::prim::If; } c10::optional EvaluateNode(ConversionCtx* ctx, const torch::jit::Node* n, int level, int limit) { From d8883c2a954438117f00036109dfe8d491363492 Mon Sep 17 00:00:00 2001 From: Naren Dasan Date: Wed, 13 Apr 2022 20:01:28 -0700 Subject: [PATCH 2/6] tests: Add tests for each supported python version Signed-off-by: Naren Dasan Signed-off-by: Naren Dasan --- noxfile.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/noxfile.py b/noxfile.py index ebc9a6048a..7e032e0001 100644 --- a/noxfile.py +++ b/noxfile.py @@ -9,7 +9,9 @@ # TOP_DIR TOP_DIR=os.path.dirname(os.path.realpath(__file__)) if not 'TOP_DIR' in os.environ else os.environ["TOP_DIR"] -nox.options.sessions = ["l0_api_tests-3"] +SUPPORTED_PYTHON_VERSIONS=["3.7", "3.8", "3.9", "3.10"] + +nox.options.sessions = ["l0_api_tests-3.7"] def install_deps(session): print("Installing deps") @@ -268,62 +270,62 @@ def run_l2_multi_gpu_tests(session, use_host_env=False): run_multi_gpu_tests(session, use_host_env) cleanup(session) -@nox.session(python=["3"], reuse_venv=True) +@nox.session(python=SUPPORTED_PYTHON_VERSIONS, reuse_venv=True) def l0_api_tests(session): """When a developer needs to check correctness for a PR or something""" run_l0_api_tests(session, use_host_env=False) -@nox.session(python=["3"], reuse_venv=True) +@nox.session(python=SUPPORTED_PYTHON_VERSIONS, reuse_venv=True) def l0_api_tests_host_deps(session): """When a developer needs to check basic api functionality using host dependencies""" run_l0_api_tests(session, use_host_env=True) -@nox.session(python=["3"], reuse_venv=True) +@nox.session(python=SUPPORTED_PYTHON_VERSIONS, reuse_venv=True) def l0_dla_tests_host_deps(session): """When a developer needs to check basic api functionality using host dependencies""" run_l0_dla_tests(session, use_host_env=True) -@nox.session(python=["3"], reuse_venv=True) +@nox.session(python=SUPPORTED_PYTHON_VERSIONS, reuse_venv=True) def l1_accuracy_tests(session): """Checking accuracy performance on various usecases""" run_l1_accuracy_tests(session, use_host_env=False) -@nox.session(python=["3"], reuse_venv=True) +@nox.session(python=SUPPORTED_PYTHON_VERSIONS, reuse_venv=True) def l1_accuracy_tests_host_deps(session): """Checking accuracy performance on various usecases using host dependencies""" run_l1_accuracy_tests(session, use_host_env=True) -@nox.session(python=["3"], reuse_venv=True) +@nox.session(python=SUPPORTED_PYTHON_VERSIONS, reuse_venv=True) def l1_int8_accuracy_tests(session): """Checking accuracy performance on various usecases""" run_l1_int8_accuracy_tests(session, use_host_env=False) -@nox.session(python=["3"], reuse_venv=True) +@nox.session(python=SUPPORTED_PYTHON_VERSIONS, reuse_venv=True) def l1_int8_accuracy_tests_host_deps(session): """Checking accuracy performance on various usecases using host dependencies""" run_l1_int8_accuracy_tests(session, use_host_env=True) -@nox.session(python=["3"], reuse_venv=True) +@nox.session(python=SUPPORTED_PYTHON_VERSIONS, reuse_venv=True) def l2_trt_compatibility_tests(session): """Makes sure that TensorRT Python and Torch-TensorRT can work together""" run_l2_trt_compatibility_tests(session, use_host_env=False) -@nox.session(python=["3"], reuse_venv=True) +@nox.session(python=SUPPORTED_PYTHON_VERSIONS, reuse_venv=True) def l2_trt_compatibility_tests_host_deps(session): """Makes sure that TensorRT Python and Torch-TensorRT can work together using host dependencies""" run_l2_trt_compatibility_tests(session, use_host_env=True) -@nox.session(python=["3"], reuse_venv=True) +@nox.session(python=SUPPORTED_PYTHON_VERSIONS, reuse_venv=True) def l2_multi_gpu_tests(session): """Makes sure that Torch-TensorRT can operate on multi-gpu systems""" run_l2_multi_gpu_tests(session, use_host_env=False) -@nox.session(python=["3"], reuse_venv=True) +@nox.session(python=SUPPORTED_PYTHON_VERSIONS, reuse_venv=True) def l2_multi_gpu_tests_host_deps(session): """Makes sure that Torch-TensorRT can operate on multi-gpu systems using host dependencies""" run_l2_multi_gpu_tests(session, use_host_env=True) -@nox.session(python=["3"], reuse_venv=True) +@nox.session(python=SUPPORTED_PYTHON_VERSIONS, reuse_venv=True) def download_test_models(session): """Grab all the models needed for testing""" download_models(session, use_host_env=True) \ No newline at end of file From 8d16055460ab4ac603c7bb0c345b8a803a92aad9 Mon Sep 17 00:00:00 2001 From: Naren Dasan Date: Wed, 13 Apr 2022 20:10:15 -0700 Subject: [PATCH 3/6] chore: Update torch dep Signed-off-by: Naren Dasan Signed-off-by: Naren Dasan --- py/requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/py/requirements.txt b/py/requirements.txt index 097a3292f3..8d12c108aa 100644 --- a/py/requirements.txt +++ b/py/requirements.txt @@ -1,3 +1,5 @@ -f https://download.pytorch.org/whl/torch_stable.html +-f https://download.pytorch.org/whl/torch/ +--extra-index-url https://download.pytorch.org/whl/cu113 torch==1.11.0+cu113 pybind11==2.6.2 From 6552f10eda913ac48c8b283bae65444e97fb8859 Mon Sep 17 00:00:00 2001 From: Naren Dasan Date: Wed, 13 Apr 2022 20:14:53 -0700 Subject: [PATCH 4/6] chore: Apply linting Signed-off-by: Naren Dasan Signed-off-by: Naren Dasan --- core/conversion/conversion.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/core/conversion/conversion.cpp b/core/conversion/conversion.cpp index 32d74b47c3..c8e1020cef 100644 --- a/core/conversion/conversion.cpp +++ b/core/conversion/conversion.cpp @@ -20,10 +20,8 @@ namespace conversion { bool isNodeConversionIgnored(const torch::jit::Node* n); bool OpSupported(const torch::jit::Node* n) { - return evaluators::shouldEvalAtConversionTime(n) - || converters::node_is_convertable(n) - || n->kind() == torch::jit::prim::Loop - || n->kind() == torch::jit::prim::If; + return evaluators::shouldEvalAtConversionTime(n) || converters::node_is_convertable(n) || + n->kind() == torch::jit::prim::Loop || n->kind() == torch::jit::prim::If; } c10::optional EvaluateNode(ConversionCtx* ctx, const torch::jit::Node* n, int level, int limit) { From 7a0a4792ebd3f5994812797bdfa6f46f0bf2b4a3 Mon Sep 17 00:00:00 2001 From: Naren Dasan Date: Mon, 18 Apr 2022 16:15:37 -0700 Subject: [PATCH 5/6] refactor(//core/conversion): Seperate out special op cases Signed-off-by: Naren Dasan Signed-off-by: Naren Dasan --- core/conversion/conversion.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/core/conversion/conversion.cpp b/core/conversion/conversion.cpp index c8e1020cef..0fa805b7fe 100644 --- a/core/conversion/conversion.cpp +++ b/core/conversion/conversion.cpp @@ -20,8 +20,11 @@ namespace conversion { bool isNodeConversionIgnored(const torch::jit::Node* n); bool OpSupported(const torch::jit::Node* n) { - return evaluators::shouldEvalAtConversionTime(n) || converters::node_is_convertable(n) || - n->kind() == torch::jit::prim::Loop || n->kind() == torch::jit::prim::If; + return evaluators::shouldEvalAtConversionTime(n) || converters::node_is_convertable(n); +} + +bool SpecialCaseSupport(const torch::jit::Node* n) { + return n->kind() == torch::jit::prim::Loop || n->kind() == torch::jit::prim::If; } c10::optional EvaluateNode(ConversionCtx* ctx, const torch::jit::Node* n, int level, int limit) { @@ -500,7 +503,7 @@ std::unordered_map GetUnsupportedOpsInBlock(cons auto schema = n->maybeSchema(); // Some ops like torch::jit::prim::Loop, torch::jit::prim::If, torch::jit::prim::DictConstruct don't have a schema // but they are supported. torch::jit::prim::DictConstruct is supported via fallback only - if (!OpSupported(n)) { + if (!OpSupported(n) && !SpecialCaseSupport(n)) { if (schema) { std::stringstream ss; ss << *schema; From 6c83a501a1783c568d1b9cd6b24dd1d3c2368dee Mon Sep 17 00:00:00 2001 From: Naren Dasan Date: Mon, 18 Apr 2022 16:58:38 -0700 Subject: [PATCH 6/6] refactor: Update file permissions Signed-off-by: Naren Dasan Signed-off-by: Naren Dasan --- core/conversion/evaluators/eval_util.cpp | 0 core/conversion/evaluators/eval_util.h | 0 core/conversion/evaluators/prim.cpp | 0 tests/core/lowering/test_reduce_to_pass.cpp | 0 4 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 core/conversion/evaluators/eval_util.cpp mode change 100755 => 100644 core/conversion/evaluators/eval_util.h mode change 100755 => 100644 core/conversion/evaluators/prim.cpp mode change 100755 => 100644 tests/core/lowering/test_reduce_to_pass.cpp diff --git a/core/conversion/evaluators/eval_util.cpp b/core/conversion/evaluators/eval_util.cpp old mode 100755 new mode 100644 diff --git a/core/conversion/evaluators/eval_util.h b/core/conversion/evaluators/eval_util.h old mode 100755 new mode 100644 diff --git a/core/conversion/evaluators/prim.cpp b/core/conversion/evaluators/prim.cpp old mode 100755 new mode 100644 diff --git a/tests/core/lowering/test_reduce_to_pass.cpp b/tests/core/lowering/test_reduce_to_pass.cpp old mode 100755 new mode 100644