You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by ar...@apache.org on 2022/04/18 18:12:32 UTC
[tvm] branch main updated: [ci] Migrate all test steps to macros (#10968)
This is an automated email from the ASF dual-hosted git repository.
areusch 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 1e524d0670 [ci] Migrate all test steps to macros (#10968)
1e524d0670 is described below
commit 1e524d0670af320a09af5ae0d632336defcb8410
Author: driazati <94...@users.noreply.github.com>
AuthorDate: Mon Apr 18 11:12:26 2022 -0700
[ci] Migrate all test steps to macros (#10968)
This moves all the tests in the `Jenkinsfile` to use the `test_step` macros so they all get the same timeout/condition/skipping behavior. This also adds 2 shards for i386 and GPU unittests, the 2 remaining longest jobs.
Co-authored-by: driazati <dr...@users.noreply.github.com>
---
Jenkinsfile | 183 +++++++++++++++++++++++++++++++++-------------
jenkins/Jenkinsfile.j2 | 195 ++++++++++++++++---------------------------------
2 files changed, 192 insertions(+), 186 deletions(-)
diff --git a/Jenkinsfile b/Jenkinsfile
index abe17fac32..e7d7c7da86 100755
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -45,7 +45,7 @@
// 'python3 jenkins/generate.py'
// Note: This timestamp is here to ensure that updates to the Jenkinsfile are
// always rebased on main before merging:
-// Generated at 2022-04-14T17:16:16.585491
+// Generated at 2022-04-15T11:19:32.757632
import org.jenkinsci.plugins.pipeline.modeldefinition.Utils
// NOTE: these lines are scanned by docker/dev_common.sh. Please update the regex as needed. -->
@@ -614,31 +614,75 @@ stage('Test') {
environment {
SKIP_SLOW_TESTS = "${skip_slow_tests}"
}
- parallel 'unittest: GPU': {
+ parallel(
+ 'unittest: GPU 1 of 2': {
if (!skip_ci && is_docs_only_build != 1) {
- node('TensorCore') {
+ node('GPU') {
ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-gpu") {
try {
init_git()
- unpack_lib('gpu2', tvm_multilib)
- cpp_unittest(ci_gpu)
+ timeout(time: max_time, unit: 'MINUTES') {
+ withEnv([
+ 'TVM_NUM_SHARDS=2',
+ 'TVM_SHARD_INDEX=0'], {
+ unpack_lib('gpu2', tvm_multilib)
+ cpp_unittest(ci_gpu)
- unpack_lib('gpu', tvm_multilib)
+ unpack_lib('gpu', tvm_multilib)
+ ci_setup(ci_gpu)
+ cpp_unittest(ci_gpu)
+ sh (
+ script: "${docker_run} ${ci_gpu} ./tests/scripts/task_java_unittest.sh",
+ label: 'Run Java unit tests',
+ )
+ sh (
+ script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_unittest_gpuonly.sh",
+ label: 'Run Python GPU unit tests',
+ )
+ sh (
+ script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_integration_gpuonly.sh",
+ label: 'Run Python GPU integration tests',
+ )
+ })
+ }
+ } finally {
+ junit 'build/pytest-results/*.xml'
+ }
+ }
+ }
+ } else {
+ Utils.markStageSkippedForConditional('unittest: GPU 1 of 2')
+ }
+ },
+ 'unittest: GPU 2 of 2': {
+ if (!skip_ci && is_docs_only_build != 1) {
+ node('GPU') {
+ ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-gpu") {
+ try {
+ init_git()
timeout(time: max_time, unit: 'MINUTES') {
- ci_setup(ci_gpu)
- cpp_unittest(ci_gpu)
- sh (
- script: "${docker_run} ${ci_gpu} ./tests/scripts/task_java_unittest.sh",
- label: 'Run Java unit tests',
- )
- sh (
- script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_unittest_gpuonly.sh",
- label: 'Run Python GPU unit tests',
- )
- sh (
- script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_integration_gpuonly.sh",
- label: 'Run Python GPU integration tests',
- )
+ withEnv([
+ 'TVM_NUM_SHARDS=2',
+ 'TVM_SHARD_INDEX=1'], {
+ unpack_lib('gpu2', tvm_multilib)
+ cpp_unittest(ci_gpu)
+
+ unpack_lib('gpu', tvm_multilib)
+ ci_setup(ci_gpu)
+ cpp_unittest(ci_gpu)
+ sh (
+ script: "${docker_run} ${ci_gpu} ./tests/scripts/task_java_unittest.sh",
+ label: 'Run Java unit tests',
+ )
+ sh (
+ script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_unittest_gpuonly.sh",
+ label: 'Run Python GPU unit tests',
+ )
+ sh (
+ script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_integration_gpuonly.sh",
+ label: 'Run Python GPU integration tests',
+ )
+ })
}
} finally {
junit 'build/pytest-results/*.xml'
@@ -646,7 +690,7 @@ stage('Test') {
}
}
} else {
- Utils.markStageSkippedForConditional('unittest: GPU')
+ Utils.markStageSkippedForConditional('unittest: GPU 2 of 2')
}
},
'integration: CPU 1 of 2': {
@@ -707,10 +751,10 @@ stage('Test') {
if (!skip_ci && is_docs_only_build != 1) {
node('CPU') {
ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-cpu") {
- try {
- init_git()
- unpack_lib('cpu', tvm_multilib_tsim)
- timeout(time: max_time, unit: 'MINUTES') {
+ timeout(time: max_time, unit: 'MINUTES') {
+ try {
+ init_git()
+ unpack_lib('cpu', tvm_multilib_tsim)
ci_setup(ci_cpu)
cpp_unittest(ci_cpu)
python_unittest(ci_cpu)
@@ -719,6 +763,36 @@ stage('Test') {
script: "${docker_run} ${ci_cpu} ./tests/scripts/task_python_vta_tsim.sh",
label: 'Run VTA tests in TSIM',
)
+ } finally {
+ junit 'build/pytest-results/*.xml'
+ }
+ }
+ }
+ }
+ } else {
+ Utils.markStageSkippedForConditional('unittest: CPU')
+ }
+ },
+ 'python: i386 1 of 2': {
+ if (!skip_ci && is_docs_only_build != 1) {
+ node('CPU') {
+ ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/integration-python-i386") {
+ try {
+ init_git()
+ timeout(time: max_time, unit: 'MINUTES') {
+ withEnv([
+ 'TVM_NUM_SHARDS=2',
+ 'TVM_SHARD_INDEX=0'], {
+ unpack_lib('i386', tvm_multilib)
+ ci_setup(ci_i386)
+ cpp_unittest(ci_i386)
+ python_unittest(ci_i386)
+ sh (
+ script: "${docker_run} ${ci_i386} ./tests/scripts/task_python_integration_i386only.sh",
+ label: 'Run i386 integration tests',
+ )
+ fsim_test(ci_i386)
+ })
}
} finally {
junit 'build/pytest-results/*.xml'
@@ -726,25 +800,29 @@ stage('Test') {
}
}
} else {
- Utils.markStageSkippedForConditional('unittest: CPU')
+ Utils.markStageSkippedForConditional('python: i386 1 of 2')
}
},
- 'python3: i386': {
+ 'python: i386 2 of 2': {
if (!skip_ci && is_docs_only_build != 1) {
node('CPU') {
- ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-i386") {
+ ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/integration-python-i386") {
try {
init_git()
- unpack_lib('i386', tvm_multilib)
timeout(time: max_time, unit: 'MINUTES') {
- ci_setup(ci_i386)
- cpp_unittest(ci_i386)
- python_unittest(ci_i386)
- sh (
- script: "${docker_run} ${ci_i386} ./tests/scripts/task_python_integration_i386only.sh",
- label: 'Run i386 integration tests',
- )
- fsim_test(ci_i386)
+ withEnv([
+ 'TVM_NUM_SHARDS=2',
+ 'TVM_SHARD_INDEX=1'], {
+ unpack_lib('i386', tvm_multilib)
+ ci_setup(ci_i386)
+ cpp_unittest(ci_i386)
+ python_unittest(ci_i386)
+ sh (
+ script: "${docker_run} ${ci_i386} ./tests/scripts/task_python_integration_i386only.sh",
+ label: 'Run i386 integration tests',
+ )
+ fsim_test(ci_i386)
+ })
}
} finally {
junit 'build/pytest-results/*.xml'
@@ -752,7 +830,7 @@ stage('Test') {
}
}
} else {
- Utils.markStageSkippedForConditional('python3: i386')
+ Utils.markStageSkippedForConditional('python: i386 2 of 2')
}
},
'test: Hexagon': {
@@ -1042,18 +1120,18 @@ stage('Test') {
if (!skip_ci && is_docs_only_build != 1) {
node('CPU') {
ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/frontend-python-cpu") {
- try {
- init_git()
- unpack_lib('cpu', tvm_multilib)
- timeout(time: max_time, unit: 'MINUTES') {
+ timeout(time: max_time, unit: 'MINUTES') {
+ try {
+ init_git()
+ unpack_lib('cpu', tvm_multilib)
ci_setup(ci_cpu)
sh (
script: "${docker_run} ${ci_cpu} ./tests/scripts/task_python_frontend_cpu.sh",
label: 'Run Python frontend tests',
)
+ } finally {
+ junit 'build/pytest-results/*.xml'
}
- } finally {
- junit 'build/pytest-results/*.xml'
}
}
}
@@ -1064,19 +1142,19 @@ stage('Test') {
'frontend: aarch64': {
if (!skip_ci && is_docs_only_build != 1) {
node('ARM') {
- ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-arm") {
- try {
- init_git()
- unpack_lib('arm', tvm_multilib)
- timeout(time: max_time, unit: 'MINUTES') {
+ ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/frontend-python-arm") {
+ timeout(time: max_time, unit: 'MINUTES') {
+ try {
+ init_git()
+ unpack_lib('arm', tvm_multilib)
ci_setup(ci_arm)
sh (
script: "${docker_run} ${ci_arm} ./tests/scripts/task_python_frontend_cpu.sh",
label: 'Run Python frontend tests',
)
+ } finally {
+ junit 'build/pytest-results/*.xml'
}
- } finally {
- junit 'build/pytest-results/*.xml'
}
}
}
@@ -1102,7 +1180,8 @@ stage('Test') {
}
}
}
- }
+ },
+ )
}
/*
diff --git a/jenkins/Jenkinsfile.j2 b/jenkins/Jenkinsfile.j2
index 62a1487f7a..f58a2e1cdf 100644
--- a/jenkins/Jenkinsfile.j2
+++ b/jenkins/Jenkinsfile.j2
@@ -611,41 +611,27 @@ stage('Test') {
environment {
SKIP_SLOW_TESTS = "${skip_slow_tests}"
}
- parallel 'unittest: GPU': {
- if (!skip_ci && is_docs_only_build != 1) {
- node('TensorCore') {
- ws({{ m.per_exec_ws('tvm/ut-python-gpu') }}) {
- try {
- init_git()
- unpack_lib('gpu2', tvm_multilib)
- cpp_unittest(ci_gpu)
-
- unpack_lib('gpu', tvm_multilib)
- timeout(time: max_time, unit: 'MINUTES') {
- ci_setup(ci_gpu)
- cpp_unittest(ci_gpu)
- sh (
- script: "${docker_run} ${ci_gpu} ./tests/scripts/task_java_unittest.sh",
- label: 'Run Java unit tests',
- )
- sh (
- script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_unittest_gpuonly.sh",
- label: 'Run Python GPU unit tests',
- )
- sh (
- script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_integration_gpuonly.sh",
- label: 'Run Python GPU integration tests',
- )
- }
- } finally {
- junit 'build/pytest-results/*.xml'
- }
- }
- }
- } else {
- Utils.markStageSkippedForConditional('unittest: GPU')
- }
- },
+ parallel(
+ {% call m.sharded_test_step(name="unittest: GPU", num_shards=2, node="GPU", ws="tvm/ut-python-gpu") %}
+ unpack_lib('gpu2', tvm_multilib)
+ cpp_unittest(ci_gpu)
+
+ unpack_lib('gpu', tvm_multilib)
+ ci_setup(ci_gpu)
+ cpp_unittest(ci_gpu)
+ sh (
+ script: "${docker_run} ${ci_gpu} ./tests/scripts/task_java_unittest.sh",
+ label: 'Run Java unit tests',
+ )
+ sh (
+ script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_unittest_gpuonly.sh",
+ label: 'Run Python GPU unit tests',
+ )
+ sh (
+ script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_integration_gpuonly.sh",
+ label: 'Run Python GPU integration tests',
+ )
+ {% endcall %}
{% call m.sharded_test_step(name="integration: CPU", node="CPU", num_shards=2, ws="tvm/integration-python-cpu") %}
unpack_lib('cpu', tvm_multilib_tsim)
ci_setup(ci_cpu)
@@ -654,58 +640,28 @@ stage('Test') {
label: 'Run CPU integration tests',
)
{% endcall %}
- 'unittest: CPU': {
- if (!skip_ci && is_docs_only_build != 1) {
- node('CPU') {
- ws({{ m.per_exec_ws('tvm/ut-python-cpu') }}) {
- try {
- init_git()
- unpack_lib('cpu', tvm_multilib_tsim)
- timeout(time: max_time, unit: 'MINUTES') {
- ci_setup(ci_cpu)
- cpp_unittest(ci_cpu)
- python_unittest(ci_cpu)
- fsim_test(ci_cpu)
- sh (
- script: "${docker_run} ${ci_cpu} ./tests/scripts/task_python_vta_tsim.sh",
- label: 'Run VTA tests in TSIM',
- )
- }
- } finally {
- junit 'build/pytest-results/*.xml'
- }
- }
- }
- } else {
- Utils.markStageSkippedForConditional('unittest: CPU')
- }
- },
- 'python3: i386': {
- if (!skip_ci && is_docs_only_build != 1) {
- node('CPU') {
- ws({{ m.per_exec_ws('tvm/ut-python-i386') }}) {
- try {
- init_git()
- unpack_lib('i386', tvm_multilib)
- timeout(time: max_time, unit: 'MINUTES') {
- ci_setup(ci_i386)
- cpp_unittest(ci_i386)
- python_unittest(ci_i386)
- sh (
- script: "${docker_run} ${ci_i386} ./tests/scripts/task_python_integration_i386only.sh",
- label: 'Run i386 integration tests',
- )
- fsim_test(ci_i386)
- }
- } finally {
- junit 'build/pytest-results/*.xml'
- }
- }
- }
- } else {
- Utils.markStageSkippedForConditional('python3: i386')
- }
- },
+ {% call m.test_step(name="unittest: CPU", node="CPU", ws="tvm/ut-python-cpu") %}
+ unpack_lib('cpu', tvm_multilib_tsim)
+ ci_setup(ci_cpu)
+ cpp_unittest(ci_cpu)
+ python_unittest(ci_cpu)
+ fsim_test(ci_cpu)
+ sh (
+ script: "${docker_run} ${ci_cpu} ./tests/scripts/task_python_vta_tsim.sh",
+ label: 'Run VTA tests in TSIM',
+ )
+ {% endcall %}
+ {% call m.sharded_test_step(name="python: i386", node="CPU", num_shards=2, ws="tvm/integration-python-i386") %}
+ unpack_lib('i386', tvm_multilib)
+ ci_setup(ci_i386)
+ cpp_unittest(ci_i386)
+ python_unittest(ci_i386)
+ sh (
+ script: "${docker_run} ${ci_i386} ./tests/scripts/task_python_integration_i386only.sh",
+ label: 'Run i386 integration tests',
+ )
+ fsim_test(ci_i386)
+ {% endcall %}
{% call m.test_step(name="test: Hexagon", node="CPU", ws="tvm/test-hexagon") %}
unpack_lib('hexagon', tvm_lib)
ci_setup(ci_hexagon)
@@ -778,52 +734,22 @@ stage('Test') {
label: 'Run Python frontend tests',
)
{% endcall %}
- 'frontend: CPU': {
- if (!skip_ci && is_docs_only_build != 1) {
- node('CPU') {
- ws({{ m.per_exec_ws('tvm/frontend-python-cpu') }}) {
- try {
- init_git()
- unpack_lib('cpu', tvm_multilib)
- timeout(time: max_time, unit: 'MINUTES') {
- ci_setup(ci_cpu)
- sh (
- script: "${docker_run} ${ci_cpu} ./tests/scripts/task_python_frontend_cpu.sh",
- label: 'Run Python frontend tests',
- )
- }
- } finally {
- junit 'build/pytest-results/*.xml'
- }
- }
- }
- } else {
- Utils.markStageSkippedForConditional('frontend: CPU')
- }
- },
- 'frontend: aarch64': {
- if (!skip_ci && is_docs_only_build != 1) {
- node('ARM') {
- ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-arm") {
- try {
- init_git()
- unpack_lib('arm', tvm_multilib)
- timeout(time: max_time, unit: 'MINUTES') {
- ci_setup(ci_arm)
- sh (
- script: "${docker_run} ${ci_arm} ./tests/scripts/task_python_frontend_cpu.sh",
- label: 'Run Python frontend tests',
- )
- }
- } finally {
- junit 'build/pytest-results/*.xml'
- }
- }
- }
- } else {
- Utils.markStageSkippedForConditional('frontend: aarch64')
- }
- },
+ {% call m.test_step(name="frontend: CPU", node="CPU", ws="tvm/frontend-python-cpu") %}
+ unpack_lib('cpu', tvm_multilib)
+ ci_setup(ci_cpu)
+ sh (
+ script: "${docker_run} ${ci_cpu} ./tests/scripts/task_python_frontend_cpu.sh",
+ label: 'Run Python frontend tests',
+ )
+ {% endcall %}
+ {% call m.test_step(name="frontend: aarch64", node="ARM", ws="tvm/frontend-python-arm") %}
+ unpack_lib('arm', tvm_multilib)
+ ci_setup(ci_arm)
+ sh (
+ script: "${docker_run} ${ci_arm} ./tests/scripts/task_python_frontend_cpu.sh",
+ label: 'Run Python frontend tests',
+ )
+ {% endcall %}
'docs: GPU': {
if (!skip_ci) {
node('TensorCore') {
@@ -842,7 +768,8 @@ stage('Test') {
}
}
}
- }
+ },
+ )
}
/*