|
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | 16 |
|
17 | | -@Library(['bloom-jenkins-shared-lib@main', 'trtllm-jenkins-shared-lib@main']) _ |
| 17 | +@Library(['bloom-jenkins-shared-lib@dev-yanchaol-fix-step-log-retry', 'trtllm-jenkins-shared-lib@main']) _ |
18 | 18 |
|
19 | 19 | import java.lang.InterruptedException |
20 | 20 | import groovy.transform.Field |
@@ -941,14 +941,18 @@ def runLLMTestlistWithAgent(pipeline, platform, testList, config=VANILLA_CONFIG, |
941 | 941 | throw e |
942 | 942 | } |
943 | 943 | } finally { |
944 | | - captureSlurmJobNodeList(pipeline, cluster, partition.clusterName, slurmJobID, placementContext, stageName) |
945 | | - stage("Clean Up Slurm Resource") { |
946 | | - // Workaround to handle the interruption during clean up SLURM resources |
947 | | - retry(3) { |
948 | | - try { |
949 | | - cleanUpNodeResources(pipeline, cluster, partition.clusterName, nodeName, slurmJobID) |
950 | | - } catch (Exception e) { |
951 | | - error "Error during clean up SLURM resources: ${e.getMessage()} and retrying." |
| 944 | + // Resource cleanup must run even if SLURM metadata capture is interrupted. |
| 945 | + try { |
| 946 | + captureSlurmJobNodeList(pipeline, cluster, partition.clusterName, slurmJobID, placementContext, stageName) |
| 947 | + } finally { |
| 948 | + stage("Clean Up Slurm Resource") { |
| 949 | + // Workaround to handle the interruption during clean up SLURM resources |
| 950 | + retry(3) { |
| 951 | + try { |
| 952 | + cleanUpNodeResources(pipeline, cluster, partition.clusterName, nodeName, slurmJobID) |
| 953 | + } catch (Exception e) { |
| 954 | + error "Error during clean up SLURM resources: ${e.getMessage()} and retrying." |
| 955 | + } |
952 | 956 | } |
953 | 957 | } |
954 | 958 | } |
@@ -1707,15 +1711,19 @@ def runLLMTestlistWithSbatch(pipeline, platform, testList, config=VANILLA_CONFIG |
1707 | 1711 | stageIsInterrupted = true |
1708 | 1712 | throw e |
1709 | 1713 | } finally { |
1710 | | - captureSlurmJobNodeList(pipeline, cluster, partition.clusterName, placementContext?.slurmJobId ?: null, placementContext, stageName, jobWorkspace) |
1711 | | - uploadResults(pipeline, cluster, partition.clusterName, jobUID, stageName, stageIsInterrupted, postTag) |
1712 | | - stage("Clean Up Slurm Resource") { |
1713 | | - // Workaround to handle the interruption during clean up SLURM resources |
1714 | | - retry(3) { |
1715 | | - try { |
1716 | | - cleanUpSlurmResources(pipeline, cluster, partition.clusterName, jobUID) |
1717 | | - } catch (Exception e) { |
1718 | | - error "Error during clean up SLURM resources: ${e.getMessage()} and retrying." |
| 1714 | + // Resource cleanup must run even if metadata capture or result upload is interrupted. |
| 1715 | + try { |
| 1716 | + captureSlurmJobNodeList(pipeline, cluster, partition.clusterName, placementContext?.slurmJobId ?: null, placementContext, stageName, jobWorkspace) |
| 1717 | + uploadResults(pipeline, cluster, partition.clusterName, jobUID, stageName, stageIsInterrupted, postTag) |
| 1718 | + } finally { |
| 1719 | + stage("Clean Up Slurm Resource") { |
| 1720 | + // Workaround to handle the interruption during clean up SLURM resources |
| 1721 | + retry(3) { |
| 1722 | + try { |
| 1723 | + cleanUpSlurmResources(pipeline, cluster, partition.clusterName, jobUID) |
| 1724 | + } catch (Exception e) { |
| 1725 | + error "Error during clean up SLURM resources: ${e.getMessage()} and retrying." |
| 1726 | + } |
1719 | 1727 | } |
1720 | 1728 | } |
1721 | 1729 | } |
@@ -2493,6 +2501,12 @@ def createKubernetesPodConfig(image, type, arch = "amd64", gpuCount = 1, perfMod |
2493 | 2501 | - SYS_ADMIN""" |
2494 | 2502 | break |
2495 | 2503 | } |
| 2504 | + // Temporarily avoid an arm64 CPU builder with repeated pod DNS/JNLP failures seen in Build-SBSA #5564. |
| 2505 | + def blockedNodeAffinity = targetCloud == "kubernetes-cpu" && arch == "arm64" ? ''' |
| 2506 | + - key: "kubernetes.io/hostname" |
| 2507 | + operator: NotIn |
| 2508 | + values: |
| 2509 | + - "rl300-0021.ipp2a1.colossus"''' : "" |
2496 | 2510 | def nodeLabel = trtllm_utils.generateNodeLabel(nodeLabelPrefix) |
2497 | 2511 | def pvcVolume = """ |
2498 | 2512 | - name: sw-tensorrt-pvc |
@@ -2548,6 +2562,7 @@ def createKubernetesPodConfig(image, type, arch = "amd64", gpuCount = 1, perfMod |
2548 | 2562 | values: |
2549 | 2563 | - "core" |
2550 | 2564 | - "qa_only" |
| 2565 | +${blockedNodeAffinity} |
2551 | 2566 | nodeSelector: ${selectors} |
2552 | 2567 | containers: |
2553 | 2568 | ${containerConfig} |
|
0 commit comments