Jenkinsfile 8.27 KB
Newer Older
Chris Austen's avatar
Chris Austen committed
1
def getgputargets() {
2
    targets="gfx906;gfx908;gfx90a;gfx1030;gfx1100;gfx1101;gfx1102"
Chris Austen's avatar
Chris Austen committed
3
4
    return targets
}
Paul's avatar
Paul committed
5

6
7
8
9
10
11
12
13
// 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
14
    def ccache = "/var/jenkins/.cache/ccache"
Paul's avatar
Paul committed
15
    def image = 'migraphxlib'
Paul Fultz II's avatar
Paul Fultz II committed
16
17
    env.CCACHE_COMPRESSLEVEL = 7
    env.CCACHE_DIR = ccache
Paul Fultz II's avatar
Paul Fultz II committed
18
19
20
21
    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
22
        def cmd = """
Paul's avatar
Paul committed
23
            ulimit -c unlimited
Paul's avatar
Paul committed
24
            echo "leak:dnnl::impl::malloc" > suppressions.txt
25
26
            echo "leak:libtbb.so" >> suppressions.txt
            cat suppressions.txt
Paul's avatar
Paul committed
27
            export LSAN_OPTIONS="suppressions=\$(pwd)/suppressions.txt"
Paul Fultz II's avatar
Paul Fultz II committed
28
29
30
31
            export MIGRAPHX_GPU_DEBUG=${gpu_debug}
            export CXX=${compiler}
            export CXXFLAGS='-Werror'
            env
Paul's avatar
Paul committed
32
33
34
            rm -rf build
            mkdir build
            cd build
35
            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} ..
36
37
38
39
40
41
            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
42
            md5sum ./*.deb
Paul's avatar
Paul committed
43
44
45
        """
        echo cmd
        sh cmd
Umang Yadav's avatar
Umang Yadav committed
46
47
48
        // 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
49
        }
Paul's avatar
Paul committed
50
51
    }
    node(name) {
52
        withEnv(['HSA_ENABLE_SDMA=0']) {
Paul's avatar
Paul committed
53
54
55
            stage("checkout ${variant}") {
                checkout scm
            }
Paul's avatar
Paul committed
56
            gitStatusWrapper(credentialsId: "${env.status_wrapper_creds}", gitHubContext: "Jenkins - ${variant}", account: 'ROCmSoftwarePlatform', repo: 'AMDMIGraphX') {
Paul's avatar
Paul committed
57
58
59
60
61
62
                pre()
                stage("image ${variant}") {
                    try {
                        docker.build("${image}", "${docker_build_args} .")
                    } catch(Exception ex) {
                        docker.build("${image}", "${docker_build_args} --no-cache .")
Paul's avatar
Paul committed
63

Paul's avatar
Paul committed
64
                    }
Paul's avatar
Paul committed
65
                }
Paul Fultz II's avatar
Paul Fultz II committed
66
                withDockerContainer(image: image, args: "--device=/dev/kfd --device=/dev/dri --group-add video --cap-add SYS_PTRACE -v=/var/jenkins/:/var/jenkins ${docker_args}") {
67
                    timeout(time: 2, unit: 'HOURS') {
Paul's avatar
Paul committed
68
69
                        body(cmake_build)
                    }
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";
Chris Austen's avatar
Chris Austen committed
98
99
    } else if(name == "migraphx-trial") {
        node_name = "${rocmtest_name} && (migraphx-trial) && !vm";
100
    } else if(name == "cdna") {
101
        node_name = "${rocmtest_name} && (gfx908 || gfx90a || vega20) && !vm";
Paul's avatar
Paul committed
102
    } else if(name == "nogpu") {
103
        node_name = "${rocmtest_name} && nogpu";
Paul's avatar
Paul committed
104
    }
105
    return node_name
Paul's avatar
Paul committed
106
107
}

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

Chris Austen's avatar
Chris Austen committed
114
rocmtest clang_debug: rocmnode('migraphx-trial') { cmake_build ->
115
    stage('hipRTC Debug') {
116
117
118
119
120
121
122
        // 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
123
    }
Chris Austen's avatar
Chris Austen committed
124
}, clang_release: rocmnode('migraphx-trial') { cmake_build ->
125
    stage('Hip Clang Release') {
Chris Austen's avatar
Chris Austen committed
126
127
        def gpu_targets = getgputargets()
        cmake_build(flags: "-DCMAKE_BUILD_TYPE=release -DGPU_TARGETS='${gpu_targets}'")
Paul Fultz II's avatar
Paul Fultz II committed
128
        stash includes: 'build/*.deb', name: 'migraphx-package'
Paul's avatar
Paul committed
129
    }
130
131
132
133
// }, 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")
//     }
Chris Austen's avatar
Chris Austen committed
134
}, all_targets_debug : rocmnode('migraphx-trial') { cmake_build ->
135
    stage('All targets Release') {
Chris Austen's avatar
Chris Austen committed
136
137
        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}'")
138
    }
Chris Austen's avatar
Chris Austen committed
139
}, mlir_debug: rocmnode('migraphx-trial') { cmake_build ->
140
    stage('MLIR Debug') {
141
        withEnv(['MIGRAPHX_ENABLE_EXTRA_MLIR=1', 'MIGRAPHX_MLIR_USE_SPECIFIC_OPS=fused,attention,convolution,dot']) {
142
            def sanitizers = "undefined"
143
144
145
            // 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
146
            def gpu_targets = getgputargets()
147
148
            // Since the purpose of this run verify all things MLIR supports,
            // enabling all possible types of offloads
Chris Austen's avatar
Chris Austen committed
149
            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}'")
150
        }
151
    }
Chris Austen's avatar
Chris Austen committed
152
}, ck_hiprtc: rocmnode('migraphx-trial') { cmake_build ->
153
    stage('CK hipRTC') {
154
        withEnv(['MIGRAPHX_ENABLE_CK=1', 'MIGRAPHX_TUNE_CK=1', 'MIGRAPHX_DISABLE_MLIR=1']) {
Chris Austen's avatar
Chris Austen committed
155
156
            def gpu_targets = getgputargets()
            cmake_build(flags: "-DCMAKE_BUILD_TYPE=release -DMIGRAPHX_USE_HIPRTC=On -DGPU_TARGETS='${gpu_targets}'")
157
158
        }
    }
Paul's avatar
Paul committed
159
160
161
}, clang_asan: rocmnode('nogpu') { cmake_build ->
    stage('Clang ASAN') {
        def sanitizers = "undefined,address"
Paul's avatar
Paul committed
162
        def debug_flags = "-g -O2 -fno-omit-frame-pointer -fsanitize=${sanitizers} -fno-sanitize-recover=${sanitizers}"
Chris Austen's avatar
Chris Austen committed
163
164
        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
165
    }
166
167
}//, clang_release_navi: rocmnode('navi21') { cmake_build ->
//    stage('HIP Clang Release Navi') {
Paul Fultz II's avatar
Paul Fultz II committed
168
//        cmake_build(flags: "-DCMAKE_BUILD_TYPE=release")
169
170
//    }
//}
Paul Fultz II's avatar
Paul Fultz II committed
171

172
173
174
175
def onnxnode(name, body) {
    return { label ->
        rocmtestnode(variant: label, node: rocmnodename(name), docker_args: '-u root', body: body, pre: {
            sh 'rm -rf ./build/*.deb'
176
            unstash 'migraphx-package'
177
178
179
180
        })
    }
}

Chris Austen's avatar
Chris Austen committed
181
rocmtest onnx: onnxnode('migraphx-trial') { cmake_build ->
Paul Fultz II's avatar
Paul Fultz II committed
182
183
    stage("Onnx runtime") {
        sh '''
184
            apt install half
Chris Austen's avatar
Chris Austen committed
185
186
            #ls -lR
            md5sum ./build/*.deb
187
            dpkg -i ./build/*.deb
188
            env
Paul Fultz II's avatar
Paul Fultz II committed
189
190
191
192
            cd /onnxruntime && ./build_and_test_onnxrt.sh
        '''
    }
}