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)