[CI] Move cpu-only frontend tests to a CPU stage (#5807)
authorTianqi Chen <tqchen@users.noreply.github.com>
Mon, 15 Jun 2020 03:53:11 +0000 (20:53 -0700)
committerGitHub <noreply@github.com>
Mon, 15 Jun 2020 03:53:11 +0000 (20:53 -0700)
Jenkinsfile
src/contrib/hybrid/codegen_hybrid.h
tests/python/frontend/tflite/test_forward.py
tests/scripts/setup-pytest-env.sh
tests/scripts/task_python_frontend.sh
tests/scripts/task_python_frontend_cpu.sh [new file with mode: 0755]

index 1d711dd..65b48af 100644 (file)
@@ -159,7 +159,7 @@ stage('Build') {
         init_git()
         sh "${docker_run} ${ci_cpu} ./tests/scripts/task_config_build_cpu.sh"
         make(ci_cpu, 'build', '-j2')
-        pack_lib('cpu', tvm_lib)
+        pack_lib('cpu', tvm_multilib)
         timeout(time: max_time, unit: 'MINUTES') {
           sh "${docker_run} ${ci_cpu} ./tests/scripts/task_python_unittest.sh"
           sh "${docker_run} ${ci_cpu} ./tests/scripts/task_python_integration.sh"
@@ -258,6 +258,17 @@ stage('Integration Test') {
       }
     }
   },
+  'frontend: CPU': {
+    node('CPU') {
+      ws(per_exec_ws("tvm/frontend-python-cpu")) {
+        init_git()
+        unpack_lib('cpu', tvm_multilib)
+        timeout(time: max_time, unit: 'MINUTES') {
+          sh "${docker_run} ${ci_cpu} ./tests/scripts/task_python_frontend_cpu.sh"
+        }
+      }
+    }
+  },
   'docs: GPU': {
     node('TensorCore') {
       ws(per_exec_ws("tvm/docs-python-gpu")) {
index f42f8db..b01ca27 100644 (file)
@@ -87,36 +87,36 @@ class CodeGenHybrid : public ExprFunctor<void(const PrimExpr&, std::ostream&)>,
     return os.str();
   }
   // expression
-  void VisitExpr_(const VarNode* op, std::ostream& os) override;        // NOLINT(*)
-  void VisitExpr_(const LoadNode* op, std::ostream& os) override;       // NOLINT(*)
-  void VisitExpr_(const LetNode* op, std::ostream& os) override;        // NOLINT(*)
-  void VisitExpr_(const CallNode* op, std::ostream& os) override;       // NOLINT(*)
+  void VisitExpr_(const VarNode* op, std::ostream& os) override;           // NOLINT(*)
+  void VisitExpr_(const LoadNode* op, std::ostream& os) override;          // NOLINT(*)
+  void VisitExpr_(const LetNode* op, std::ostream& os) override;           // NOLINT(*)
+  void VisitExpr_(const CallNode* op, std::ostream& os) override;          // NOLINT(*)
   void VisitExpr_(const ProducerLoadNode* op, std::ostream& os) override;  // NOLINT(*)
-  void VisitExpr_(const AddNode* op, std::ostream& os) override;        // NOLINT(*)
-  void VisitExpr_(const SubNode* op, std::ostream& os) override;        // NOLINT(*)
-  void VisitExpr_(const MulNode* op, std::ostream& os) override;        // NOLINT(*)
-  void VisitExpr_(const DivNode* op, std::ostream& os) override;        // NOLINT(*)
-  void VisitExpr_(const ModNode* op, std::ostream& os) override;        // NOLINT(*)
-  void VisitExpr_(const FloorDivNode* op, std::ostream& os) override;   // NOLINT(*)
-  void VisitExpr_(const FloorModNode* op, std::ostream& os) override;   // NOLINT(*)
-  void VisitExpr_(const MinNode* op, std::ostream& os) override;        // NOLINT(*)
-  void VisitExpr_(const MaxNode* op, std::ostream& os) override;        // NOLINT(*)
-  void VisitExpr_(const EQNode* op, std::ostream& os) override;         // NOLINT(*)
-  void VisitExpr_(const NENode* op, std::ostream& os) override;         // NOLINT(*)
-  void VisitExpr_(const LTNode* op, std::ostream& os) override;         // NOLINT(*)
-  void VisitExpr_(const LENode* op, std::ostream& os) override;         // NOLINT(*)
-  void VisitExpr_(const GTNode* op, std::ostream& os) override;         // NOLINT(*)
-  void VisitExpr_(const GENode* op, std::ostream& os) override;         // NOLINT(*)
-  void VisitExpr_(const AndNode* op, std::ostream& os) override;        // NOLINT(*)
-  void VisitExpr_(const OrNode* op, std::ostream& os) override;         // NOLINT(*)
-  void VisitExpr_(const CastNode* op, std::ostream& os) override;       // NOLINT(*)
-  void VisitExpr_(const NotNode* op, std::ostream& os) override;        // NOLINT(*)
-  void VisitExpr_(const SelectNode* op, std::ostream& os) override;     // NOLINT(*)
-  void VisitExpr_(const RampNode* op, std::ostream& os) override;       // NOLINT(*)
-  void VisitExpr_(const BroadcastNode* op, std::ostream& os) override;  // NOLINT(*)
-  void VisitExpr_(const IntImmNode* op, std::ostream& os) override;     // NOLINT(*)
-  void VisitExpr_(const FloatImmNode* op, std::ostream& os) override;   // NOLINT(*)
-  void VisitExpr_(const StringImmNode* op, std::ostream& os) override;  // NOLINT(*)
+  void VisitExpr_(const AddNode* op, std::ostream& os) override;           // NOLINT(*)
+  void VisitExpr_(const SubNode* op, std::ostream& os) override;           // NOLINT(*)
+  void VisitExpr_(const MulNode* op, std::ostream& os) override;           // NOLINT(*)
+  void VisitExpr_(const DivNode* op, std::ostream& os) override;           // NOLINT(*)
+  void VisitExpr_(const ModNode* op, std::ostream& os) override;           // NOLINT(*)
+  void VisitExpr_(const FloorDivNode* op, std::ostream& os) override;      // NOLINT(*)
+  void VisitExpr_(const FloorModNode* op, std::ostream& os) override;      // NOLINT(*)
+  void VisitExpr_(const MinNode* op, std::ostream& os) override;           // NOLINT(*)
+  void VisitExpr_(const MaxNode* op, std::ostream& os) override;           // NOLINT(*)
+  void VisitExpr_(const EQNode* op, std::ostream& os) override;            // NOLINT(*)
+  void VisitExpr_(const NENode* op, std::ostream& os) override;            // NOLINT(*)
+  void VisitExpr_(const LTNode* op, std::ostream& os) override;            // NOLINT(*)
+  void VisitExpr_(const LENode* op, std::ostream& os) override;            // NOLINT(*)
+  void VisitExpr_(const GTNode* op, std::ostream& os) override;            // NOLINT(*)
+  void VisitExpr_(const GENode* op, std::ostream& os) override;            // NOLINT(*)
+  void VisitExpr_(const AndNode* op, std::ostream& os) override;           // NOLINT(*)
+  void VisitExpr_(const OrNode* op, std::ostream& os) override;            // NOLINT(*)
+  void VisitExpr_(const CastNode* op, std::ostream& os) override;          // NOLINT(*)
+  void VisitExpr_(const NotNode* op, std::ostream& os) override;           // NOLINT(*)
+  void VisitExpr_(const SelectNode* op, std::ostream& os) override;        // NOLINT(*)
+  void VisitExpr_(const RampNode* op, std::ostream& os) override;          // NOLINT(*)
+  void VisitExpr_(const BroadcastNode* op, std::ostream& os) override;     // NOLINT(*)
+  void VisitExpr_(const IntImmNode* op, std::ostream& os) override;        // NOLINT(*)
+  void VisitExpr_(const FloatImmNode* op, std::ostream& os) override;      // NOLINT(*)
+  void VisitExpr_(const StringImmNode* op, std::ostream& os) override;     // NOLINT(*)
   // statment
   void VisitStmt_(const LetStmtNode* op) override;
   void VisitStmt_(const StoreNode* op) override;
index 2951540..5b2f850 100644 (file)
@@ -2437,7 +2437,7 @@ def test_forward_coco_ssd_mobilenet_v1():
 #######################################################################
 # MediaPipe
 # -------------
-
+@pytest.mark.skip("TFLite problem")
 def test_forward_mediapipe_hand_landmark():
     """Test MediaPipe 2D hand landmark TF Lite model."""
     # MediaPipe 2D hand landmark TF
index a281de0..414186c 100755 (executable)
 
 # NOTE: allow unbound variable here
 set +u
+
 if [[ ! -z $CI_PYTEST_ADD_OPTIONS ]]; then
     export PYTEST_ADDOPTS="-v $CI_PYTEST_ADD_OPTIONS"
 else
-    export PYTEST_ADDOPTS=""
+    export PYTEST_ADDOPTS="-v "
 fi
 set -u
 
index 46cb1bb..e5f9b20 100755 (executable)
@@ -29,15 +29,9 @@ find . -type f -path "*.pyc" | xargs rm -f
 # Rebuild cython
 make cython3
 
-echo "Running relay TFLite frontend test..."
-python3 -m pytest tests/python/frontend/tflite
-
 echo "Running relay MXNet frontend test..."
 python3 -m pytest tests/python/frontend/mxnet
 
-echo "Running relay Keras frontend test..."
-python3 -m pytest tests/python/frontend/keras
-
 echo "Running relay ONNX frontend test..."
 python3 -m pytest tests/python/frontend/onnx
 
diff --git a/tests/scripts/task_python_frontend_cpu.sh b/tests/scripts/task_python_frontend_cpu.sh
new file mode 100755 (executable)
index 0000000..96c5ce6
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Test frontends that only need CPU resources
+set -e
+set -u
+
+source tests/scripts/setup-pytest-env.sh
+# to avoid openblas threading error
+export TVM_BIND_THREADS=0
+export OMP_NUM_THREADS=1
+
+find . -type f -path "*.pyc" | xargs rm -f
+
+# Rebuild cython
+make cython3
+
+echo "Running relay TFLite frontend test..."
+python3 -m pytest tests/python/frontend/tflite
+
+echo "Running relay Keras frontend test..."
+python3 -m pytest tests/python/frontend/keras