This is an automated email from the ASF dual-hosted git repository.

manupa pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git


The following commit(s) were added to refs/heads/main by this push:
     new ba8698f  [CI] Fix Vitis-AI tests when USE_VITIS_AI flag set to OFF  
(#10802)
ba8698f is described below

commit ba8698f0a683dcfcdf57519cb08be661e172297e
Author: anilmartha <[email protected]>
AuthorDate: Wed Mar 30 00:16:12 2022 +0530

    [CI] Fix Vitis-AI tests when USE_VITIS_AI flag set to OFF  (#10802)
    
    * Register relay.ext.vitis_ai.available function
    
    * Fix vitis-ai tests when running with USE_VITIS_AI OFF
    
    * Replace skip_test with pytest skipif
    
    * Add a function to see if vitis_ai is available
    
    * Use requires_vitis_ai function for running tests
---
 python/tvm/relay/op/contrib/vitis_ai.py                   |  8 ++++++++
 python/tvm/testing/utils.py                               | 15 +++++++++++++++
 src/relay/backend/contrib/vitis_ai/config_vitis_ai.cc     |  2 ++
 tests/python/contrib/test_vitis_ai/infrastructure.py      |  8 --------
 .../python/contrib/test_vitis_ai/test_vitis_ai_codegen.py | 15 ++++++++++++++-
 .../test_vitis_ai/test_vitis_ai_runtime_cpu_part.py       |  6 +++---
 6 files changed, 42 insertions(+), 12 deletions(-)

diff --git a/python/tvm/relay/op/contrib/vitis_ai.py 
b/python/tvm/relay/op/contrib/vitis_ai.py
index 7b9324c..185fdc2 100644
--- a/python/tvm/relay/op/contrib/vitis_ai.py
+++ b/python/tvm/relay/op/contrib/vitis_ai.py
@@ -31,6 +31,14 @@ from tvm.relay.op.annotation import compiler_begin, 
compiler_end
 pyxir = None
 
 
+def enabled():
+    """Return whether Vitis-AI support is available"""
+    if not tvm.get_global_func("relay.ext.vitis_ai.available", True):
+        print("Skip because Vitis-AI codegen is not available.")
+        return False
+    return True
+
+
 @transform.function_pass(opt_level=0)
 class VitisAIAnnotationPass:
     """Responsible for annotating Relay expressions for Vitis-AI DPU 
accelerators
diff --git a/python/tvm/testing/utils.py b/python/tvm/testing/utils.py
index a1001d1..3043dab 100644
--- a/python/tvm/testing/utils.py
+++ b/python/tvm/testing/utils.py
@@ -85,6 +85,8 @@ from tvm.contrib import nvcc, cudnn
 from tvm.error import TVMError
 from tvm.relay.op.contrib.ethosn import ethosn_available
 from tvm.relay.op.contrib import cmsisnn
+from tvm.relay.op.contrib import vitis_ai
+
 
 SKIP_SLOW_TESTS = os.getenv("SKIP_SLOW_TESTS", "").lower() in {"true", "1", 
"yes"}
 
@@ -951,6 +953,19 @@ def requires_cmsisnn(*args):
     return _compose(args, requirements)
 
 
+def requires_vitis_ai(*args):
+    """Mark a test as requiring Vitis AI to run.
+
+    Parameters
+    ----------
+    f : function
+        Function to mark
+    """
+
+    requirements = [pytest.mark.skipif(not vitis_ai.enabled(), reason="Vitis 
AI not enabled")]
+    return _compose(args, requirements)
+
+
 def requires_package(*packages):
     """Mark a test as requiring python packages to run.
 
diff --git a/src/relay/backend/contrib/vitis_ai/config_vitis_ai.cc 
b/src/relay/backend/contrib/vitis_ai/config_vitis_ai.cc
index 5426a2d..a5d3879 100644
--- a/src/relay/backend/contrib/vitis_ai/config_vitis_ai.cc
+++ b/src/relay/backend/contrib/vitis_ai/config_vitis_ai.cc
@@ -61,6 +61,8 @@ class VitisAICompilerConfig : public Attrs {
 
 TVM_REGISTER_NODE_TYPE(VitisAICompilerConfigNode);
 TVM_REGISTER_PASS_CONFIG_OPTION("relay.ext.vitis_ai.options", 
VitisAICompilerConfig);
+TVM_REGISTER_GLOBAL("relay.ext.vitis_ai.available")
+    .set_body([](tvm::TVMArgs args, tvm::TVMRetValue* rv) { *rv = true; });
 
 // Following config options are here for backward compatibility (deprecated 
API's)
 /*! \brief The target Vitis-AI accelerator device */
diff --git a/tests/python/contrib/test_vitis_ai/infrastructure.py 
b/tests/python/contrib/test_vitis_ai/infrastructure.py
index 578ac37..00ba091 100644
--- a/tests/python/contrib/test_vitis_ai/infrastructure.py
+++ b/tests/python/contrib/test_vitis_ai/infrastructure.py
@@ -57,14 +57,6 @@ def get_cpu_op_count(mod):
     return c.count
 
 
-def skip_test():
-    """Skip test if it requires the Vitis-AI codegen and it's not present."""
-    if not tvm.get_global_func("relay.ext.vitis_ai", True):
-        print("Skip test because Vitis-AI codegen is not available.")
-        return True
-    return False
-
-
 def build_module(
     mod,
     target,
diff --git a/tests/python/contrib/test_vitis_ai/test_vitis_ai_codegen.py 
b/tests/python/contrib/test_vitis_ai/test_vitis_ai_codegen.py
index b89cc37..e9195db 100644
--- a/tests/python/contrib/test_vitis_ai/test_vitis_ai_codegen.py
+++ b/tests/python/contrib/test_vitis_ai/test_vitis_ai_codegen.py
@@ -32,12 +32,13 @@ import pyxir.contrib.target.DPUCVDX8H
 import pyxir.contrib.target.DPUCZDX8G
 import tvm
 from tvm import relay
+from tvm.testing import requires_vitis_ai
 from tvm.contrib.target import vitis_ai
 from tvm.relay import transform
 from tvm.relay.build_module import bind_params_by_name
 from tvm.relay.op.contrib.vitis_ai import annotation
 
-from .infrastructure import skip_test, verify_codegen
+from .infrastructure import verify_codegen
 
 
 def set_func_attr(func, compile_name, symbol_name):
@@ -48,6 +49,7 @@ def set_func_attr(func, compile_name, symbol_name):
     return func
 
 
+@requires_vitis_ai
 @pytest.mark.parametrize(
     "dpu_target",
     ["DPUCADF8H", "DPUCAHX8H-u50", "DPUCAHX8L", "DPUCVDX8H", "DPUCVDX8G", 
"DPUCZDX8G-zcu104"],
@@ -66,6 +68,7 @@ def test_conv2d(dpu_target):
     verify_codegen(mod, params=params, dpu_target=dpu_target, tvm_ops=2)
 
 
+@requires_vitis_ai
 @pytest.mark.parametrize("dpu_target", ["DPUCAHX8L", "DPUCZDX8G-zcu104"])
 def test_depthwise_conv(dpu_target):
     """Test depthwise_conv operator for Vitis-AI DPUCZDX8G-zcu104 target"""
@@ -84,6 +87,7 @@ def test_depthwise_conv(dpu_target):
     verify_codegen(mod, params=params, dpu_target=dpu_target, tvm_ops=2)
 
 
+@requires_vitis_ai
 @pytest.mark.parametrize(
     "dpu_target",
     ["DPUCADF8H", "DPUCAHX8H-u50", "DPUCAHX8L", "DPUCVDX8H", "DPUCVDX8G", 
"DPUCZDX8G-zcu104"],
@@ -104,6 +108,7 @@ def test_bias_add(dpu_target):
     verify_codegen(mod, params=params, dpu_target=dpu_target)
 
 
+@requires_vitis_ai
 @pytest.mark.parametrize(
     "dpu_target",
     ["DPUCADF8H", "DPUCAHX8H-u50", "DPUCAHX8L", "DPUCVDX8H", "DPUCVDX8G", 
"DPUCZDX8G-zcu104"],
@@ -120,6 +125,7 @@ def test_relu(dpu_target):
     verify_codegen(mod, dpu_target=dpu_target, num_vitis_ai_modules=0, 
tvm_ops=1)
 
 
+@requires_vitis_ai
 @pytest.mark.parametrize(
     "dpu_target",
     ["DPUCADF8H", "DPUCAHX8H-u50", "DPUCAHX8L", "DPUCVDX8H", "DPUCVDX8G", 
"DPUCZDX8G-zcu104"],
@@ -144,6 +150,7 @@ def test_batchnorm(dpu_target):
     verify_codegen(mod, params=params, dpu_target=dpu_target)
 
 
+@requires_vitis_ai
 @pytest.mark.parametrize(
     "dpu_target",
     ["DPUCADF8H", "DPUCAHX8H-u50", "DPUCAHX8L", "DPUCVDX8H", "DPUCVDX8G", 
"DPUCZDX8G-zcu104"],
@@ -160,6 +167,7 @@ def test_add(dpu_target):
     verify_codegen(mod, dpu_target=dpu_target)
 
 
+@requires_vitis_ai
 @pytest.mark.parametrize(
     "dpu_target",
     ["DPUCADF8H", "DPUCAHX8H-u50", "DPUCAHX8L", "DPUCVDX8H", "DPUCVDX8G", 
"DPUCZDX8G-zcu104"],
@@ -176,6 +184,7 @@ def test_global_avg_pool2d(dpu_target):
     verify_codegen(mod, dpu_target=dpu_target)
 
 
+@requires_vitis_ai
 @pytest.mark.parametrize(
     "dpu_target",
     ["DPUCADF8H", "DPUCAHX8H-u50", "DPUCAHX8L", "DPUCVDX8H", "DPUCVDX8G", 
"DPUCZDX8G-zcu104"],
@@ -192,6 +201,7 @@ def test_avg_pool2d(dpu_target):
     verify_codegen(mod, dpu_target=dpu_target)
 
 
+@requires_vitis_ai
 @pytest.mark.parametrize(
     "dpu_target",
     ["DPUCADF8H", "DPUCAHX8H-u50", "DPUCAHX8L", "DPUCVDX8H", "DPUCVDX8G", 
"DPUCZDX8G-zcu104"],
@@ -208,6 +218,7 @@ def test_max_pool2d(dpu_target):
     verify_codegen(mod, dpu_target=dpu_target)
 
 
+@requires_vitis_ai
 @pytest.mark.parametrize(
     "dpu_target",
     ["DPUCADF8H", "DPUCAHX8H-u50", "DPUCAHX8L", "DPUCVDX8H", "DPUCVDX8G", 
"DPUCZDX8G-zcu104"],
@@ -224,6 +235,7 @@ def test_global_max_pool2d(dpu_target):
     verify_codegen(mod, dpu_target=dpu_target)
 
 
+@requires_vitis_ai
 @pytest.mark.parametrize(
     "dpu_target",
     ["DPUCADF8H", "DPUCAHX8H-u50", "DPUCAHX8L", "DPUCVDX8H", "DPUCVDX8G", 
"DPUCZDX8G-zcu104"],
@@ -277,6 +289,7 @@ def test_conv2d_transpose(dpu_target):
     verify_codegen(mod, params=params, dpu_target=dpu_target)
 
 
+@requires_vitis_ai
 @pytest.mark.parametrize(
     "dpu_target",
     ["DPUCADF8H", "DPUCAHX8H-u50", "DPUCAHX8L", "DPUCVDX8H", "DPUCVDX8G", 
"DPUCZDX8G-zcu104"],
diff --git 
a/tests/python/contrib/test_vitis_ai/test_vitis_ai_runtime_cpu_part.py 
b/tests/python/contrib/test_vitis_ai/test_vitis_ai_runtime_cpu_part.py
index ea5ada2..0a2c13c 100644
--- a/tests/python/contrib/test_vitis_ai/test_vitis_ai_runtime_cpu_part.py
+++ b/tests/python/contrib/test_vitis_ai/test_vitis_ai_runtime_cpu_part.py
@@ -47,15 +47,15 @@ import pyxir.contrib.target.DPUCZDX8G
 import tvm
 import tvm.relay.testing
 from tvm import relay
+from tvm.testing import requires_vitis_ai
 
-from .infrastructure import skip_test, verify_result
+from .infrastructure import verify_result
 
 
+@requires_vitis_ai
 @pytest.mark.parametrize("dpu_target", ["DPUCADF8H", "DPUCVDX8H", 
"DPUCZDX8G-zcu104"])
 def test_extern_vitis_ai_resnet18(dpu_target):
     """Test first part of Vitis AI on-the-fly quantization runtime with ResNet 
18 model"""
-    if skip_test():
-        return
 
     dtype = "float32"
     ishape = (1, 3, 224, 224)

Reply via email to