From e650d787e448de43678106f7d098c4560671b50c Mon Sep 17 00:00:00 2001 From: Zhanrui Sun <184402041+ZhanruiSunCh@users.noreply.github.com> Date: Wed, 7 May 2025 15:34:16 +0800 Subject: [PATCH] infra: [TRTLLM-4051] Support only run some backend type test (#3578) * [TRTLLM-4051] Support only run some backend type test Signed-off-by: ZhanruiSunCh <184402041+ZhanruiSunCh@users.noreply.github.com> * Fix Signed-off-by: ZhanruiSunCh <184402041+ZhanruiSunCh@users.noreply.github.com> * Fix name Signed-off-by: ZhanruiSunCh <184402041+ZhanruiSunCh@users.noreply.github.com> * Fix pre-commit Signed-off-by: ZhanruiSunCh <184402041+ZhanruiSunCh@users.noreply.github.com> * Fix groovy error Signed-off-by: ZhanruiSunCh <184402041+ZhanruiSunCh@users.noreply.github.com> * Update L0_Test.groovy Signed-off-by: Zhanrui Sun <184402041+ZhanruiSunCh@users.noreply.github.com> --------- Signed-off-by: ZhanruiSunCh <184402041+ZhanruiSunCh@users.noreply.github.com> Signed-off-by: Zhanrui Sun <184402041+ZhanruiSunCh@users.noreply.github.com> --- jenkins/L0_MergeRequest.groovy | 6 ++++- jenkins/L0_Test.groovy | 40 +++++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/jenkins/L0_MergeRequest.groovy b/jenkins/L0_MergeRequest.groovy index 10879f59c2..eca8be3c89 100644 --- a/jenkins/L0_MergeRequest.groovy +++ b/jenkins/L0_MergeRequest.groovy @@ -79,6 +79,8 @@ def TEST_STAGE_LIST = "stage_list" @Field def GPU_TYPE_LIST = "gpu_type" @Field +def TEST_BACKEND = "test_backend" +@Field def IS_POST_MERGE = "post_merge" @Field def ADD_MULTI_GPU_TEST = "add_multi_gpu_test" @@ -104,6 +106,7 @@ def testFilter = [ (ENABLE_SKIP_TEST): gitlabParamsFromBot.get((ENABLE_SKIP_TEST), false), (TEST_STAGE_LIST): trimForStageList(gitlabParamsFromBot.get((TEST_STAGE_LIST), null)?.tokenize(',')), (GPU_TYPE_LIST): trimForStageList(gitlabParamsFromBot.get((GPU_TYPE_LIST), null)?.tokenize(',')), + (TEST_BACKEND): trimForStageList(gitlabParamsFromBot.get((TEST_BACKEND), null)?.tokenize(',')), (IS_POST_MERGE): (env.JOB_NAME ==~ /.*PostMerge.*/) || gitlabParamsFromBot.get((IS_POST_MERGE), false), (ADD_MULTI_GPU_TEST): gitlabParamsFromBot.get((ADD_MULTI_GPU_TEST), false), (ONLY_MULTI_GPU_TEST): gitlabParamsFromBot.get((ONLY_MULTI_GPU_TEST), false) || gitlabParamsFromBot.get((ENABLE_MULTI_GPU_TEST), false), @@ -134,7 +137,8 @@ boolean enableUpdateGitlabStatus = !testFilter[ENABLE_SKIP_TEST] && !testFilter[ONLY_MULTI_GPU_TEST] && testFilter[GPU_TYPE_LIST] == null && - testFilter[TEST_STAGE_LIST] == null + testFilter[TEST_STAGE_LIST] == null && + testFilter[TEST_BACKEND] == null String getShortenedJobName(String path) { diff --git a/jenkins/L0_Test.groovy b/jenkins/L0_Test.groovy index 02b9b23109..b498b426bb 100644 --- a/jenkins/L0_Test.groovy +++ b/jenkins/L0_Test.groovy @@ -101,6 +101,8 @@ def TEST_STAGE_LIST = "stage_list" @Field def GPU_TYPE_LIST = "gpu_type" @Field +def TEST_BACKEND = "test_backend" +@Field def IS_POST_MERGE = "post_merge" @Field def ADD_MULTI_GPU_TEST = "add_multi_gpu_test" @@ -124,6 +126,7 @@ def testFilter = [ (ENABLE_SKIP_TEST): false, (TEST_STAGE_LIST): null, (GPU_TYPE_LIST): null, + (TEST_BACKEND): null, (IS_POST_MERGE): false, (ADD_MULTI_GPU_TEST): false, (ONLY_MULTI_GPU_TEST): false, @@ -1533,27 +1536,52 @@ def launchTestJobs(pipeline, testFilter, dockerNode=null) // Check --gpu-type, filter test stages. if (testFilter[(GPU_TYPE_LIST)] != null) { - echo "Use GPU_TYPE_LIST for filtering." + echo "Use GPU_TYPE_LIST for filtering. GPU types: ${testFilter[(GPU_TYPE_LIST)]}." parallelJobsFiltered = parallelJobsFiltered.findAll {it.key.tokenize('-')[0] in testFilter[(GPU_TYPE_LIST)]} println parallelJobsFiltered.keySet() } - if (testFilter[(ONLY_PYTORCH_FILE_CHANGED)]) { - echo "ONLY_PYTORCH_FILE_CHANGED mode is true." - parallelJobsFiltered = parallelJobsFiltered.findAll { !it.key.contains("-CPP-") && !it.key.contains("-TensorRT-") } + // Check --backend-mode, filter test stages. + if (testFilter[(TEST_BACKEND)] != null) { + echo "Use TEST_BACKEND for filtering. Backend mode: ${testFilter[(TEST_BACKEND)]}." + def backendMode = testFilter[(TEST_BACKEND)].collect { it.toLowerCase() } + def changeMap = [ + "pytorch": "-PyTorch-", + "tensorrt": "-TensorRT-", + "cpp": "-CPP-", + ] + def backendModeList = backendMode.collect { changeMap.get(it) }.flatten() + def parallelJobsNoBackend = parallelJobsFiltered.findAll { key, _ -> + !changeMap.values().any { backend -> key.contains(backend) } + } + def parallelJobsBackendMode = parallelJobsFiltered.findAll { key, _ -> + backendModeList.any { backend -> key.contains(backend) } + } + parallelJobsFiltered = parallelJobsNoBackend + parallelJobsBackendMode + echo "parallelJobsBackendMode: ${parallelJobsBackendMode.keySet()}" println parallelJobsFiltered.keySet() } + if (testFilter[(ONLY_PYTORCH_FILE_CHANGED)]) { + if (testFilter[(TEST_BACKEND)] != null) { + echo "Force disable ONLY_PYTORCH_FILE_CHANGED mode. Backend mode set by flag: ${testFilter[(TEST_BACKEND)]}." + } else { + echo "ONLY_PYTORCH_FILE_CHANGED mode is true." + parallelJobsFiltered = parallelJobsFiltered.findAll { !it.key.contains("-CPP-") && !it.key.contains("-TensorRT-") } + println parallelJobsFiltered.keySet() + } + } + // Check --stage-list, only run the stages in stage-list. if (testFilter[TEST_STAGE_LIST] != null) { - echo "Use TEST_STAGE_LIST for filtering." + echo "Use TEST_STAGE_LIST for filtering. Stages: ${testFilter[(TEST_STAGE_LIST)]}." parallelJobsFiltered = parallelJobs.findAll {it.key in testFilter[(TEST_STAGE_LIST)]} println parallelJobsFiltered.keySet() } // Check --extra-stage, add the stages in extra-stage. if (testFilter[EXTRA_STAGE_LIST] != null) { - echo "Use EXTRA_STAGE_LIST for filtering." + echo "Use EXTRA_STAGE_LIST for filtering. Stages: ${testFilter[(EXTRA_STAGE_LIST)]}." parallelJobsFiltered += parallelJobs.findAll {it.key in testFilter[(EXTRA_STAGE_LIST)]} println parallelJobsFiltered.keySet() }