Jenkinsfile 10 KB
Newer Older
1
2
3
4
import org.jenkinsci.plugins.pipeline.modeldefinition.Utils

DOCKER_IMAGE = 'rocm/migraphx-ci-ubuntu'

Chris Austen's avatar
Chris Austen committed
5
def getgputargets() {
6
    targets="gfx906;gfx908;gfx90a;gfx1030;gfx1100;gfx1101;gfx1102"
Chris Austen's avatar
Chris Austen committed
7
8
    return targets
}
Paul's avatar
Paul committed
9

10
11
12
13
14
15
16
17
// def rocmtestnode(variant, name, body, args, pre) {
def rocmtestnode(Map conf) {
    def variant = conf.get("variant")
    def name = conf.get("node")
    def body = conf.get("body")
    def docker_args = conf.get("docker_args", "")
    def docker_build_args = conf.get("docker_build_args", "")
    def pre = conf.get("pre", {})
Paul Fultz II's avatar
Paul Fultz II committed
18
    def ccache = "/var/jenkins/.cache/ccache"
Paul's avatar
Paul committed
19
    def image = 'migraphxlib'
Paul Fultz II's avatar
Paul Fultz II committed
20
21
    env.CCACHE_COMPRESSLEVEL = 7
    env.CCACHE_DIR = ccache
Paul Fultz II's avatar
Paul Fultz II committed
22
23
24
25
    def cmake_build = { bconf ->
        def compiler = bconf.get("compiler", "/opt/rocm/llvm/bin/clang++")
        def flags = bconf.get("flags", "")
        def gpu_debug = bconf.get("gpu_debug", "0")
Paul's avatar
Paul committed
26
        def cmd = """
Paul's avatar
Paul committed
27
            ulimit -c unlimited
Paul's avatar
Paul committed
28
            echo "leak:dnnl::impl::malloc" > suppressions.txt
29
30
            echo "leak:libtbb.so" >> suppressions.txt
            cat suppressions.txt
Paul's avatar
Paul committed
31
            export LSAN_OPTIONS="suppressions=\$(pwd)/suppressions.txt"
Paul Fultz II's avatar
Paul Fultz II committed
32
33
34
35
            export MIGRAPHX_GPU_DEBUG=${gpu_debug}
            export CXX=${compiler}
            export CXXFLAGS='-Werror'
            env
Paul's avatar
Paul committed
36
37
38
            rm -rf build
            mkdir build
            cd build
39
            cmake -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DBUILD_DEV=On -DCMAKE_EXECUTE_PROCESS_COMMAND_ECHO=STDOUT -DMIGRAPHX_DISABLE_VIRTUAL_ENV=ON ${flags} ..
40
41
42
43
44
45
            git diff
            git diff-index --quiet HEAD || (echo "Git repo is not clean after running cmake." && exit 1)
            make -j\$(nproc) generate VERBOSE=1
            git diff
            git diff-index --quiet HEAD || (echo "Generated files are different. Please run make generate and commit the changes." && exit 1)
            make -j\$(nproc) all doc package check VERBOSE=1
Chris Austen's avatar
Chris Austen committed
46
            md5sum ./*.deb
Paul's avatar
Paul committed
47
48
49
        """
        echo cmd
        sh cmd
Umang Yadav's avatar
Umang Yadav committed
50
51
52
        // Only archive from master or develop
        if (env.BRANCH_NAME == "develop" || env.BRANCH_NAME == "master") {
            archiveArtifacts artifacts: "build/*.deb", allowEmptyArchive: true, fingerprint: true
Paul's avatar
Paul committed
53
        }
Paul's avatar
Paul committed
54
55
    }
    node(name) {
56
        withEnv(['HSA_ENABLE_SDMA=0']) {
Paul's avatar
Paul committed
57
58
59
            stage("checkout ${variant}") {
                checkout scm
            }
Paul's avatar
Paul committed
60
            gitStatusWrapper(credentialsId: "${env.status_wrapper_creds}", gitHubContext: "Jenkins - ${variant}", account: 'ROCmSoftwarePlatform', repo: 'AMDMIGraphX') {
61
62
63
64
65
66
67
68
                withCredentials([usernamePassword(credentialsId: 'docker_test_cred', passwordVariable: 'DOCKERHUB_PASS', usernameVariable: 'DOCKERHUB_USER')]) {
                    sh "echo $DOCKERHUB_PASS | docker login --username $DOCKERHUB_USER --password-stdin"
                    pre()
                    sh "docker pull ${DOCKER_IMAGE}:${env.IMAGE_TAG}"
                    withDockerContainer(image: "${DOCKER_IMAGE}:${env.IMAGE_TAG}", args: "--device=/dev/kfd --device=/dev/dri --group-add video --cap-add SYS_PTRACE -v=/var/jenkins/:/var/jenkins ${docker_args}") {
                        timeout(time: 2, unit: 'HOURS') {
                            body(cmake_build)
                        }
Paul's avatar
Paul committed
69
                    }
Paul's avatar
Paul committed
70
                }
Paul's avatar
Paul committed
71
72
73
74
75
76
            }
        }
    }
}
def rocmtest(m) {
    def builders = [:]
Paul Fultz II's avatar
Paul Fultz II committed
77
    m.each { e ->
Paul's avatar
Paul committed
78
79
80
81
82
83
84
85
86
        def label = e.key;
        def action = e.value;
        builders[label] = {
            action(label)
        }
    }
    parallel builders
}

87
def rocmnodename(name) {
Paul's avatar
Paul committed
88
89
90
91
92
93
    def rocmtest_name = "(rocmtest || migraphx)"
    def node_name = "${rocmtest_name}"
    if(name == "fiji") {
        node_name = "${rocmtest_name} && fiji";
    } else if(name == "vega") {
        node_name = "${rocmtest_name} && vega";
94
95
    } else if(name == "navi21") {
        node_name = "${rocmtest_name} && navi21";
96
    } else if(name == "mi100+") {
97
        node_name = "${rocmtest_name} && (gfx908 || gfx90a) && !vm";
98
    } else if(name == "cdna") {
99
        node_name = "${rocmtest_name} && (gfx908 || gfx90a || vega20) && !vm";
Paul's avatar
Paul committed
100
    } else if(name == "nogpu") {
101
        node_name = "${rocmtest_name} && nogpu";
Paul's avatar
Paul committed
102
    }
103
    return node_name
Paul's avatar
Paul committed
104
105
}

Paul Fultz II's avatar
Paul Fultz II committed
106
def rocmnode(name, body) {
107
108
109
    return { label ->
        rocmtestnode(variant: label, node: rocmnodename(name), body: body)
    }
Paul Fultz II's avatar
Paul Fultz II committed
110
111
}

112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
properties([
    parameters([
        booleanParam(name: 'FORCE_DOCKER_IMAGE_BUILD', defaultValue: false)
    ])
])

node("(rocmtest || migraphx)") {
    Boolean imageExists = false
    withCredentials([usernamePassword(credentialsId: 'docker_test_cred', passwordVariable: 'DOCKERHUB_PASS', usernameVariable: 'DOCKERHUB_USER')]) {
        sh "echo $DOCKERHUB_PASS | docker login --username $DOCKERHUB_USER --password-stdin"
        stage('Check image') {
            checkout scm
            def calculateImageTagScript = """
                shopt -s globstar
                sha256sum **/Dockerfile **/*requirements.txt **/install_prereqs.sh **/rbuild.ini | sha256sum | cut -d " " -f 1
            """
            env.IMAGE_TAG = sh(script: "bash -c '${calculateImageTagScript}'", returnStdout: true).trim()
            imageExists = sh(script: "docker manifest inspect ${DOCKER_IMAGE}:${IMAGE_TAG}", returnStatus: true) == 0
        }
        stage('Build image') {
            if(!imageExists || params.FORCE_DOCKER_IMAGE_BUILD) {
                def builtImage

                try {
                    sh "docker pull ${DOCKER_IMAGE}:latest"
                    builtImage = docker.build("${DOCKER_IMAGE}:${IMAGE_TAG}", "--cache-from ${DOCKER_IMAGE}:latest .")
                } catch(Exception ex) {
                    builtImage = docker.build("${DOCKER_IMAGE}:${IMAGE_TAG}", " --no-cache .")
                }
                builtImage.push("${IMAGE_TAG}")
                builtImage.push("latest")
            } else {
                echo "Image already exists, skip building available"
                // Skip stage so it remains in the visualization
                Utils.markStageSkippedForConditional(STAGE_NAME)
            }
        }
    }
}

152
rocmtest clang_debug: rocmnode('mi100+') { cmake_build ->
153
    stage('hipRTC Debug') {
154
155
156
157
158
159
160
        // Disable MLIR since it doesnt work with all ub sanitizers
        withEnv(['MIGRAPHX_DISABLE_MLIR=1']) {
            def sanitizers = "undefined"
            def debug_flags = "-g -O2 -fsanitize=${sanitizers} -fno-sanitize-recover=${sanitizers}"
            def gpu_targets = getgputargets()
            cmake_build(flags: "-DCMAKE_BUILD_TYPE=debug -DMIGRAPHX_ENABLE_PYTHON=Off -DCMAKE_CXX_FLAGS_DEBUG='${debug_flags}' -DCMAKE_C_FLAGS_DEBUG='${debug_flags}' -DMIGRAPHX_USE_HIPRTC=On -DGPU_TARGETS='${gpu_targets}'", gpu_debug: true)
        }
Paul Fultz II's avatar
Paul Fultz II committed
161
    }
162
}, clang_release: rocmnode('mi100+') { cmake_build ->
163
    stage('Hip Clang Release') {
Chris Austen's avatar
Chris Austen committed
164
165
        def gpu_targets = getgputargets()
        cmake_build(flags: "-DCMAKE_BUILD_TYPE=release -DGPU_TARGETS='${gpu_targets}'")
Paul Fultz II's avatar
Paul Fultz II committed
166
        stash includes: 'build/*.deb', name: 'migraphx-package'
Paul's avatar
Paul committed
167
    }
168
169
170
171
// }, hidden_symbols: rocmnode('cdna') { cmake_build ->
//     stage('Hidden symbols') {
//         cmake_build(flags: "-DMIGRAPHX_ENABLE_PYTHON=Off -DMIGRAPHX_ENABLE_GPU=On -DMIGRAPHX_ENABLE_CPU=On -DCMAKE_CXX_VISIBILITY_PRESET=hidden -DCMAKE_C_VISIBILITY_PRESET=hidden")
//     }
172
}, all_targets_debug : rocmnode('mi100+') { cmake_build ->
173
    stage('All targets Release') {
Chris Austen's avatar
Chris Austen committed
174
175
        def gpu_targets = getgputargets()
        cmake_build(flags: "-DCMAKE_BUILD_TYPE=release -DMIGRAPHX_ENABLE_GPU=On -DMIGRAPHX_ENABLE_CPU=On -DMIGRAPHX_ENABLE_FPGA=On -DGPU_TARGETS='${gpu_targets}'")
176
    }
177
}, mlir_debug: rocmnode('mi100+') { cmake_build ->
178
    stage('MLIR Debug') {
179
        withEnv(['MIGRAPHX_ENABLE_EXTRA_MLIR=1', 'MIGRAPHX_MLIR_USE_SPECIFIC_OPS=fused,attention,convolution,dot']) {
180
            def sanitizers = "undefined"
181
182
183
            // Note: the -fno-sanitize= is copied from upstream LLVM_UBSAN_FLAGS.
            def debug_flags_cxx = "-g -O2 -fsanitize=${sanitizers} -fno-sanitize=vptr,function -fno-sanitize-recover=${sanitizers}"
            def debug_flags = "-g -O2 -fsanitize=${sanitizers} -fno-sanitize=vptr -fno-sanitize-recover=${sanitizers}"
Chris Austen's avatar
Chris Austen committed
184
            def gpu_targets = getgputargets()
185
186
            // Since the purpose of this run verify all things MLIR supports,
            // enabling all possible types of offloads
Chris Austen's avatar
Chris Austen committed
187
            cmake_build(flags: "-DCMAKE_BUILD_TYPE=debug -DMIGRAPHX_ENABLE_PYTHON=Off -DMIGRAPHX_ENABLE_MLIR=On -DCMAKE_CXX_FLAGS_DEBUG='${debug_flags_cxx}' -DCMAKE_C_FLAGS_DEBUG='${debug_flags}' -DGPU_TARGETS='${gpu_targets}'")
188
        }
189
    }
190
191
}, ck_hiprtc: rocmnode('mi100+') { cmake_build ->
    stage('CK hipRTC') {
192
        withEnv(['MIGRAPHX_ENABLE_CK=1', 'MIGRAPHX_TUNE_CK=1', 'MIGRAPHX_DISABLE_MLIR=1']) {
Chris Austen's avatar
Chris Austen committed
193
194
            def gpu_targets = getgputargets()
            cmake_build(flags: "-DCMAKE_BUILD_TYPE=release -DMIGRAPHX_USE_HIPRTC=On -DGPU_TARGETS='${gpu_targets}'")
195
196
        }
    }
Paul's avatar
Paul committed
197
198
199
}, clang_asan: rocmnode('nogpu') { cmake_build ->
    stage('Clang ASAN') {
        def sanitizers = "undefined,address"
Paul's avatar
Paul committed
200
        def debug_flags = "-g -O2 -fno-omit-frame-pointer -fsanitize=${sanitizers} -fno-sanitize-recover=${sanitizers}"
Chris Austen's avatar
Chris Austen committed
201
202
        def gpu_targets = getgputargets()
        cmake_build(flags: "-DCMAKE_BUILD_TYPE=debug -DMIGRAPHX_ENABLE_PYTHON=Off -DMIGRAPHX_ENABLE_GPU=Off -DMIGRAPHX_ENABLE_CPU=On -DCMAKE_CXX_FLAGS_DEBUG='${debug_flags}' -DCMAKE_C_FLAGS_DEBUG='${debug_flags}' -DGPU_TARGETS='${gpu_targets}'")
Paul's avatar
Paul committed
203
    }
204
205
}//, clang_release_navi: rocmnode('navi21') { cmake_build ->
//    stage('HIP Clang Release Navi') {
Paul Fultz II's avatar
Paul Fultz II committed
206
//        cmake_build(flags: "-DCMAKE_BUILD_TYPE=release")
207
208
//    }
//}
Paul Fultz II's avatar
Paul Fultz II committed
209

210
211
212
213
def onnxnode(name, body) {
    return { label ->
        rocmtestnode(variant: label, node: rocmnodename(name), docker_args: '-u root', body: body, pre: {
            sh 'rm -rf ./build/*.deb'
214
            unstash 'migraphx-package'
215
216
217
218
        })
    }
}

219
rocmtest onnx: onnxnode('mi100+') { cmake_build ->
Paul Fultz II's avatar
Paul Fultz II committed
220
221
    stage("Onnx runtime") {
        sh '''
222
            apt install half
Chris Austen's avatar
Chris Austen committed
223
224
            #ls -lR
            md5sum ./build/*.deb
225
            dpkg -i ./build/*.deb
226
            env
Paul Fultz II's avatar
Paul Fultz II committed
227
228
229
230
            cd /onnxruntime && ./build_and_test_onnxrt.sh
        '''
    }
}